在 re.sub 中匹配反向引用中的大小写

Match case in backreference in re.sub

我有一些 python 代码可以进行文本替换。一个例子是:

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