在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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...