python regex:匹配一个被2个字符包围的字符

时间:2012-05-30 17:50:43

标签: python regex lookahead lookbehind

我需要一个python中的正则表达式,它匹配任何被2个下划线包围的字符。 意思,意思

__a__ 

将匹配“a”, 但是

___a___ 

不匹配。 它需要支持重叠比赛, 这样

__a__d___b___e__c__ 

将返回“ac” 因为a被双下划线包围,但是d,e在它们旁边有一个三重奏,而b在两侧都有三个下划线。 我现在拥有什么

(?<=[_]{2})(.)(?=[_]{2})

它解决了重叠,但不是“正好2” 在上面的例子中,它返回“adbec”

1 个答案:

答案 0 :(得分:6)

尝试以下方法:

(?<=(?<!_)__)([^_])(?=__(?!_))

示例:

>>> regex = re.compile(r'(?<=(?<!_)__)([^_])(?=__(?!_))')
>>> regex.findall('__a__ ')
['a']
>>> regex.findall('___a___')
[]
>>> regex.findall('__a__d___b___e__c__')
['a', 'c']
>>> regex.findall('__a__c__')
['a', 'c']

你说你想要重叠匹配,但是如果你不希望c匹配__a__c__,请使用以下(这是我原来的答案):

(?<!_)__([^_])__(?!_)