我想用一系列字符替换点('.'
),例如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')
返回'.'
)。
答案 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