2015-02-03 6 views
1

정규 표현식을 사용하여 두 개의 선택자 "{"와 "}"사이에서 하나 이상의 변수 하위 문자열을 검색하려고합니다. 둘 이상을 찾으면 출력이 목록이어야합니다. 여기 Python - {}와 정규식을 사용하여 {} 사이의 부분 일치 발생

문자열의 예입니다

mystring = "foofoofoo{something}{anything}foofoofoo" 

이다 정규식 내가 사용

re.findall(r"^.*(\{.*\}).*$", mystring) 

를하지만 나에게 다음과 같은 출력을 제공합니다 {anything}

내가 함께 해봤를 r"(\{.*\})" 그리고 목록이 아니라면 거의 좋은 {something}{anything}을 반환합니다.

아이디어가 있으십니까?

답변

2

단지에서 캡처 할 수 있도록 당신의 정규식에서 앵커와 .*을 제거 {}에 :

>>> re.findall(r"\{([^}]*)\}", mystring); 
['something', 'anything'] 
+1

고마워요 :-) – SamuelRM

+1

좋은 방법 :) –

+1

간단히 내용을 캡처 할 수 있습니다. '{(. *?)}' – georg

1
re.findall(r"({.*?})", mystring) 
:

>>> mystring = "foofoofoo{something}{anything}foofoofoo"; 
>>> re.findall(r"(\{[^}]*\})", mystring); 
['{something}', '{anything}'] 

이 일치, 사용 캡처 그룹의 {} 건너 뛰기

*을 욕심을 불식 시키십시오.

+0

그것은 영리합니다. – SamuelRM