2012-05-30 2 views
1

정확히 2 개의 밑줄로 둘러싸인 char와 일치하는 python에서 정규식이 필요합니다. ,python regex : 정확하게 2 개의 문자로 둘러싸인 char와 일치합니다.

__a__ 

"은"을 일치

___a___ 

하지만

의미 의미는 일치하지 않습니다. 이 중복 일치를 지원해야하는 이중 밑줄로 둘러싸여 있기 때문에

__a__d___b___e__c__ 

는 "교류" 을 반환하지만 d를, 전자는 그 옆에 배 하나를 가지고와 b는 트리플 밑줄에있다 있도록 양측. 내가 가지고있는 지금

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

그것은 중복을 해결 아닌 "정확히 2" 위의 예에서 그것은 "adbec"

답변

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'] 

당신은 ping이 일치하지만 에 일치하는 c이 마음에 들지 않으면 다음을 사용하십시오 (내 원래 대답이었습니다) :

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