我正在尝试从字符串中删除所有非字符和所有跟随相同字符的字符。
示例输入“ABBBbbcCCCD EF ZZZU”应该成为 “ABCDDEFZU”。在filter2函数中我尝试捕获a 两个字母对,这样我就可以比较两个字母了。 但我只匹配真正匹配的字母,而不是信件背后的外观。
#!/usr/bin/python
# coding: latin-1
import re
testfield = 'ABBBbbcCCCD EF ZZZU'
def filter1(matchobj):
return ''
def filter2(matchobj):
print('MATCH:' + matchobj.group(0))
return matchobj.group(0)
print(testfield)
testfield2 = re.sub('[^A-Z0-9]', filter1, testfield, flags=re.IGNORECASE)
print(testfield2)
testfield2 = re.sub('[A-Z0-9](?=[A-Z0-9])', filter2, testfield2, flags=re.IGNORECASE)
如何将这两个字母传递给 filter2 函数但仍能找到所有可能的匹配项? 打印(testfield2)
答案 0 :(得分:1)
你应该生成你的正则表达式模式。第二个(假设你的意思是ABCDEFZU
作为最终结果),使用反向引用和lambda函数返回匹配部分的大写字母,你可以这样做:
testfield2 = re.sub(r'([A-Z0-9])\1+', lambda m: m.group(1).upper(), testfield2, flags=re.IGNORECASE)
print(testfield2)