0

我有一个文本文件,如果它前面没有紧跟数字,则需要删除字母“t”。

我正在尝试使用 re.sub 来做到这一点,我有这个:

f=open('File.txt').read()
g=f
g=re.sub('([^0-9])t','',g)

这会识别要正确删除的字母,但也会删除前面的字符。如何在替换字符串中引用带括号的正则表达式?谢谢!

4

2 回答 2

4

改为使用后视(或负后视)。

g=re.sub('(?<=[^0-9])t','',g)

或者

g=re.sub('(?<![0-9])t','',g)
于 2013-08-14T19:39:27.280 回答
3

三个选项:

g=re.sub('([^0-9])t','\\1',g)

或者

g=re.sub('(?<=[^0-9])t','',g)

或者

g=re.sub('(?<![0-9])t','',g)

第一个选项是您要查找的内容,即对捕获的字符串的反向引用。\\1将引用第一个捕获的组。

环顾四周不消耗字符,因此您无需将它们替换回来。在这里,我对第一个使用了正面的lookbehind,对第二个使用了负面的lookbehind。那些不会使用括号内的字符,因此您不会在替换中使用[^0-9]or 。[0-9]使用这些可能会更好,因为它可以防止重叠匹配。

积极的后视确保它t前面有一个非数字字符。否定的lookbehind确保它t之前没有数字字符。

于 2013-08-14T19:39:27.313 回答