Regex 仅当模式前面有列表中的一个单词时,正则表达式才与模式匹配

Regex 仅当模式前面有列表中的一个单词时,正则表达式才与模式匹配,regex,python-3.x,Regex,Python 3.x,我不熟悉python中的正则表达式。我试图通过网络从我的问题中找到答案,但这些都不起作用。我试图用“是”替换“s”,前提是它前面有一个单数代词。所以像“他”、“它”这样的词将被“他是”、“它是”所取代 我尝试的是: line1=“完成了。但是你还得做一些事情。加里的狗在警局。把它带回家。太远了。下雨了” re.sub((?您有两个问题。首先,您混淆了正则表达式字符类和替代字符类。您当前的查找并不是指您所想的: (?<=[it|that|here|there|he|she]) 但是,即使修

我不熟悉python中的正则表达式。我试图通过网络从我的问题中找到答案,但这些都不起作用。我试图用“是”替换“s”,前提是它前面有一个单数代词。所以像“他”、“它”这样的词将被“他是”、“它是”所取代

我尝试的是:

line1=“完成了。但是你还得做一些事情。加里的狗在警局。把它带回家。太远了。下雨了”


re.sub((?您有两个问题。首先,您混淆了正则表达式字符类和替代字符类。您当前的查找并不是指您所想的:

(?<=[it|that|here|there|he|she])
但是,即使修复此项也不起作用,因为
re.sub
不支持可变宽度lookbehind。我们可以通过捕获前一项,然后在替换中使用它来解决此问题:

re.sub("(it|that|here|there|he|she)'s", '\\1 is', line1, flags=re.IGNORECASE)

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
虽然我不确定它是否会有很大帮助,但它确实起到了作用:

去掉
re.IGNORECASE
选项


>>re.sub(“(?尝试使用标记来更好地描述您的
代码
。这将有助于提高可读性。Doesn不会在python36中运行-
引发错误(“向后看需要固定宽度模式”)
谢谢。这里也解释了-我带着你的建议跑了,这是我得到的结果。我肯定你在发帖之前跑了,但为什么在我的情况下不起作用“完成了。但是\x01是你必须做的更多。Gary的狗在辖区内。把它带回家。太远了。t\x01是雨”​@Shrishthakulkarni我的答案中有一些小的拼写错误,毫无疑问是因为没有测试我的代码。请检查更新的答案和演示现在一切正常。如果你的建议有效,那只是因为运气不好。lookback
(但我用粗体写了它,我的解决方案对大多数情况没有多大帮助,但至少它是有效的。你的模式将用
基因是
替换单词
基因是
。同样,巧合的是,对于输入,它是有效的,但这不应该依赖。是的。
re.sub("(it|that|here|there|he|she)'s", '\\1 is', line1, flags=re.IGNORECASE)

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
>>> re.sub("(?<=[it|that|here|there|he|she])'s",' is',line1)
"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"