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