1

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

__a__ 

将匹配“a”,但

___a___ 

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

__a__d___b___e__c__ 

将返回“ac”,因为 a 被双下划线包围,但 d,e 旁边有一个三重下划线,b 两边都有一个三重下划线。我现在拥有的

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

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

4

1 回答 1

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匹配 in __a__c__,请使用以下内容(这是我的原始答案):

(?<!_)__([^_])__(?!_)
于 2012-05-30T17:57:50.390 回答