我需要一个python中的正则表达式,它匹配任何被2个下划线包围的字符。 意思,意思
__a__
将匹配“a”, 但是
___a___
不匹配。 它需要支持重叠比赛, 这样
__a__d___b___e__c__
将返回“ac” 因为a被双下划线包围,但是d,e在它们旁边有一个三重奏,而b在两侧都有三个下划线。 我现在拥有什么
(?<=[_]{2})(.)(?=[_]{2})
它解决了重叠,但不是“正好2” 在上面的例子中,它返回“adbec”
答案 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__
,请使用以下(这是我原来的答案):
(?<!_)__([^_])__(?!_)