当指定组名时,re.sub()表现异常

时间:2018-10-21 22:22:50

标签: python regex replace regex-group

我想用一系列字符替换点('.'),例如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'DOT\g<dot>', input_str)

print(output)
'foDOT.ar'

这根本不是我所期望的。我试图将.sub()替换为.search(),但似乎工作正常(match.group('dot')返回'.')。

2 个答案:

答案 0 :(得分:1)

为什么您要为要丢弃的东西需要命名捕获?我说的是(?P<dot>\.)。这是您的操作方式:

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

答案 1 :(得分:1)

或者不使用组:

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