【问题标题】:Match case in backreference in re.sub在 re.sub 的反向引用中匹配大小写
【发布时间】:2020-09-16 16:59:50
【问题描述】:

我有一些用于文本替换的 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 是可以接受的。

【问题讨论】:

  • 它只用于第一个字母,还是h也可以大写?
  • 有各种各样的词和各种各样的展示位置。我想我正在寻找更多关于反向引用替换中的广义大小写匹配。

标签: python regex backreference


【解决方案1】:

没有这样的功能,替换反向引用总是包含捕获到相应组中的确切文本。

您可以做的是评估匹配并在替换时应用自定义逻辑:

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

【讨论】:

  • 谢谢,我想会是这样,但感谢您提供了一个好的解决方法。我会把它打开一天,以防万一其他人用了魔法。
猜你喜欢
  • 2014-01-12
  • 2016-07-03
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
相关资源
最近更新 更多