Python正则表达式从字符串中删除双字符

时间:2014-02-02 11:28:58

标签: python regex

我正在尝试从字符串中删除所有非字符和所有跟随相同字符的字符。

示例输入“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)

1 个答案:

答案 0 :(得分:1)

你应该生成你的正则表达式模式。第二个(假设你的意思是ABCDEFZU作为最终结果),使用反向引用和lambda函数返回匹配部分的大写字母,你可以这样做:

testfield2 = re.sub(r'([A-Z0-9])\1+', lambda m: m.group(1).upper(), testfield2, flags=re.IGNORECASE)
print(testfield2)

ideone demo