我有以下字符串string = DdCcaaBbbB
。我要删除具有以下形式的同一字母的所有组合,即x
是任何字母:xX
,Xx
。
我想一个一个地删除它们,在示例中,首先删除Dd
,然后删除Cc
,Bb
,最后删除bB
。
到目前为止,我所做的是:
for letter in string.lower():
try:
string = string.replace(re.search(letter + letter.upper(), string).group(),'')
except:
try:
string = string.replace(re.search(letter.upper() + letter, string).group(),'')
except:
pass
但是我确信这不是最Python的方式。我想到的是一个问题,那就是我是否可以结合正在寻找的两种模式。任何其他建议或改进都值得欢迎!
答案 0 :(得分:0)
我认为您可以进行不区分大小写的正则表达式搜索,以找到相同两个字母的所有组合,然后在确定是否为xX
或Xx
格式时进行功能检查应该将其替换(什么都不要)或单独放置。
def replacer(match):
text = match.group()
if (text[0].islower() and text[1].isupper()) or (text[0].isupper() and text[1].islower()):
return ""
return text
string = "DdCcaaBbbB"
pattern = r'([a-z])\1'
new_string = re.sub(pattern, replacer, string, flags=re.IGNORECASE)
这种方法有一个缺点。由于正则表达式不区分大小写匹配,因此您无法测试重叠的匹配项。因此,如果您有一个类似'BBbb'
的输入字符串,它将匹配两个大写字母B
和两个小写字母b
,并且不会替换任何一对,并且不会检查Bb
对在中间。
不幸的是,我认为正则表达式无法解决该问题,因为它无法在搜索过程中转换大小写。我们已经超出了最基本的正则表达式规范的范围,因为我们需要使用反向引用来达到我们所能做到的范围。