为了弥补Python的
re正则表达式引擎缺乏某些Perl功能的不足,可以在
re.sub函数中使用lambda表达式来创建动态替换:
import restring = "It was never going to work, he thought. He did not play so well, so he had to practice some more. Not foobar !"transformed = re.sub(r'b(?:not|never|no)b[ws]+[^ws]', lambda match: re.sub(r'(s+)(w+)', r'1NEG_2', match.group(0)), string, flags=re.IGNORECASE)
将打印(此处为演示)
It was never NEG_going NEG_to NEG_work, he thought. He did not NEG_play NEG_so NEG_well, so he had to practice some more. Not NEG_foobar !
说明
- 第一步是选择您感兴趣的字符串部分。
b(?:not|never|no)b[ws]+[^ws]
您的否定关键字(
b是一个单词边界,
(?:...)一个非捕获性组),后跟字母和空格(
wis
[0-9a-zA-Z_],
s是所有空白),直到既不是字母数字也不是空格(用作标点符号)为止。
请注意,此处标点符号是强制性的,但您也可以安全地删除它
[^ws]以匹配字符串的结尾。
- 现在,您正在处理
never going to work,
某种字符串。只需选择前面带有空格的单词(s+)(w+)
并用您想要的替换它们
1NEG_2
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)