问题描述
regex.sub(r"\bPhrensy",r"Frenzy",xhtml) # Phrensy -> Frenzy
regex.sub(r"\bphrensy",r"frenzy",xhtml) # phrensy -> frenzy
由于输入的任何一种情况都可能以单词开头,因此对于这两种替换,我们都有两行。如果我可以将其([Pp])
的捕获组压缩为一行,那将是很好的选择,但是替换总是一个案例。
我已经阅读了backreference docs,以查看是否存在此功能,但是什么也看不到。可能不是语言,只是为了以防万一:我在python3的反向引用替换中是否缺少大小写匹配?
理想情况下,大小写匹配也可以识别Unicode大小写,但前提是它只能与可接受的ASCII一起使用。
解决方法
没有此类功能,替换后向引用始终包含捕获到相应组中的确切文本。
您可以做的是评估匹配并在替换时应用自定义逻辑:
import re
text = "phrensy likes me. Phrensy doesn't."
print ( re.sub(r"\b([Pp])hrensy",lambda x: ("F" if x.group(1).isupper() else "f") + r"renzy",text) )
# => frenzy likes me. Frenzy doesn't.
请参见Python demo