Python正则表达式问题:仅替换单数代词后的's为is
解决Python正则替换特定代词后's为is的问题
嘿,我来帮你搞定这个正则的小麻烦!你的需求很明确:只把it、that、here、there、he、she这些单数代词后面的's替换成 is,但你的正则没生效,问题出在字符组的用法上,咱们一步步来改。
原正则的问题
你写的(?<=[it|that|here|there|he|she])'s里,[]是字符组,它的作用是匹配其中任意一个单个字符,而不是你以为的“或”逻辑。比如这个字符组实际会匹配i、t、|、h、a、e、r、s这些单个字符,完全没法匹配完整的代词,自然达不到预期效果。
正确的正则写法
我们需要用分组来匹配完整的代词,再加上单词边界\b,确保我们匹配的是独立的代词,而不是其他单词的一部分(比如避免误改Gary's这种所有格)。正确的代码如下:
import re line1 = "It's done. But there's some more you have to do. Gary's dog is in the precinct. Get it home. It's too far. There's rain" # 使用正向后顾断言+单词边界+分组实现精准匹配 result = re.sub(r"(?<=\b(it|that|here|there|he|she)\b)'s", r' is', line1, flags=re.IGNORECASE) print(result)
正则各部分解释
\b:单词边界,确保前面的内容是一个完整的单词(比如不会把Gary里的后缀字符误判为代词)(?<=\b(it|that|here|there|he|she)\b):正向后顾断言,检查当前位置的前面是否是指定的代词之一's:匹配我们要替换的目标字符串flags=re.IGNORECASE:忽略大小写,所以It's、There's这类首字母大写的情况也能匹配到
运行结果
执行上面的代码后,输出会是:
It is done. But there is some more you have to do. Gary's dog is in the precinct. Get it home. It is too far. There is rain
你看,Gary's被保留了,只有目标代词后面的's被替换成了 is,完全符合你的需求!
内容的提问来源于stack exchange,提问作者Shreshtha Kulkarni
相关产品推荐
相关产品推荐

