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

Bg1*_*987 1 python regex lookahead lookbehind

我需要一个python中的正则表达式,匹配任何被2个下划线包围的字符.含义,含义

__a__ 
Run Code Online (Sandbox Code Playgroud)

将匹配"a",但是

___a___ 
Run Code Online (Sandbox Code Playgroud)

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

__a__d___b___e__c__ 
Run Code Online (Sandbox Code Playgroud)

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

(?<=[_]{2})(.)(?=[_]{2})
Run Code Online (Sandbox Code Playgroud)

它解决了重叠,但不是上面例子中的"确切2"它返回"adbec"

And*_*ark 6

请尝试以下方法:

(?<=(?<!_)__)([^_])(?=__(?!_))
Run Code Online (Sandbox Code Playgroud)

例子:

>>> 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']
Run Code Online (Sandbox Code Playgroud)

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

(?<!_)__([^_])__(?!_)
Run Code Online (Sandbox Code Playgroud)