假设我想用Mr.
替换Mr
和Mister
的所有匹配项。
我正在使用以下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.'