re.sub() 在指定组名时行为异常



我想用一系列字符替换点('.'(,例如foo.bar>fooDOTbar,但仅当点不在两个数字之间时,例如0.9>0.9.所以我做到了:

regex = re.compile(r'([a-zA-Z])(?P<dot>.)([a-zA-Z])')
input_str = 'foo.bar'
output = regex.sub(r'DOTg<dot>', input_str)
print(output)
'foDOT.ar'

这根本不是我所期望的。我试图用.search()替换.sub()它似乎工作得很好(match.group('dot')返回'.'(。

为什么你需要一个命名的捕获来捕获你知道要扔掉的东西?我说的是(?P<dot>.).这是你这样做的方法:

>>> regex = re.compile(r'(?P<before>[a-zA-Z])(.)(?P<after>[a-zA-Z])')
>>> regex.sub(r'g<before>DOTg<after>', input)
'fooDOTbar'

或者不使用组:

import re
regex = re.compile(r'(?<=[a-zA-Z])(.)(?=[a-zA-Z])')
input_str = 'foo.bar'
output = regex.sub(r'DOT', input_str)
print(output)

输出:

fooDOTbar

最新更新