python - 使用正则表达式将python中的大写重复字母替换为单个小写字母

标签 python regex capitalization

我试图用小写字母的单个实例替换在字符串中重复两次的大写字母的任何实例。我正在使用以下正则表达式,它能够匹配重复的大写字母,但我不确定如何将被替换的字母变为小写。

import re
s = 'start TT end'
re.sub(r'([A-Z]){2}', r"\1", s)
>>> 'start T end'

如何使“\1”小写?我不应该使用正则表达式来执行此操作吗?

最佳答案

Pass a function作为 repl 参数。 MatchObject被传递给这个函数并且 .group(1) 给出第一个带括号的子组:

import re
s = 'start TT end'
callback = lambda pat: pat.group(1).lower()
re.sub(r'([A-Z]){2}', callback, s)

编辑
是的,你应该使用 ([A-Z])\1 而不是 ([A-Z]){2} 以便 not 匹配例如AZ。 (参见@bobince 的 answer。)

import re
s = 'start TT end'
re.sub(r'([A-Z])\1', lambda pat: pat.group(1).lower(), s) # Inline

给予:

'start t end'

关于python - 使用正则表达式将python中的大写重复字母替换为单个小写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4145451/

相关文章:

php - 将 wordpress powered 站点中的所有标题转换为 "Capitalized"大小写

python - 如何访问 PeeweeforeignKeyField 的一列

python - 如何从测试套件中提取测试用例列表?

python - dash_html_components 包已弃用。请将 `import dash_html_components 替换为 html

python - 使用 PyParsing 解析 Snort 日志

javascript - 仅在 "scope"内应用正则表达式替换

ruby - 从 ruby​​ 上的匹配中获取字符串

python - 为什么一些很可能知道 PEP8 的开发人员将他们的包名称大写? (例如 : Django, Sphinx、Fabric、...)

regex - R:在某个字符后大写所有内容

java - 如何在java中不解析xml获取特定值