首页 > 解决方案 > 指定组名时 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'DOT\g<dot>', input_str)

print(output)
'foDOT.ar'

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

标签: pythonregexreplaceregex-group

解决方案


为什么你需要为你知道你会扔掉的东西命名捕获?我在谈论(?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'

推荐阅读