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