微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?