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