假设我想用Mr.替换MrMister的所有匹配项。
我正在使用以下regex:\bMr(\.)?\b来匹配Mr.或只是Mr。然后,我使用re.sub() method进行替换。
令我困惑的是,它正在将Mr.替换为Mister.。为什么这会使点保持在末尾?它看起来不符合.的情况,但只是Mr\.

import re
s="a rMr. Nobody Mr. Nobody is Mr Nobody and Mra Nobody."
re.sub(r"\bMr(\.)?\b","Mister", s)

返回:
'a rMr. Nobody Mister. Nobody is Mister Nobody and Mra Nobody.'

我也尝试了以下方法,但也没有运气:
re.sub(r"\b(Mr\.|Mr)\b","Mister", s)

我想要的输出是:
'a rMr. Nobody Mister Nobody is Mister Nobody and Mra Nobody.'
                     ^                              ^
                     no dot            this should be kept as it is

最佳答案

我想你要捕捉'Mr'后面跟着一个'.'或一个词的边界:

r"\bMr(?:\.|\b)"

使用中:
>>> import re
>>> re.sub(r"\bMr(?:\.|\b)", "Mister", "a rMr. Nobody Mr. Nobody is Mr Nobody and Mra Nobody.")
'a rMr. Nobody Mister Nobody is Mister Nobody and Mra Nobody.'

10-06 00:00