2012-03-25 8 views
0

나는 텍스트가 정규식은 다음과 같습니다.정규식

 re.search('\[\[.*\]\]$',values) 
    \[\[(\w+\s\w+)\]\](.*)$' 
    \[\[(\w+)\]\] 

아무 것도 작동하지 않습니다. 누구든지 잘못 될 것을 제안 할 수 있습니까?

+1

re.search가 작동하지 않을 경우 첫 번째 일치 항목을 찾은 후 반환됩니다. 또한 *는 욕심이 많으므로 가능한 한 많은 입력을 먹을 것이라는 점에 유의하십시오 ([[]] [[b]]는 [[. *]]로 먹습니다). 비 탐욕적인 검사 *? . – tchap

답변

2

다음 정규식 트릭을 수행해야합니다

\[\[(.*?)\]\] 

당신이 우리가와 경기를 할 수있을 때까지 단지 전자 문자 승/. 일치 일치 있도록 *이 지연 될 와일드 카드를 확인하기 만하면됩니다 마지막 두 개의 괄호 (실제로 작동하는 방식이 아니라 결과입니다).

이 특정 웹 사이트 욕심/게으른 취소 할 수 있습니다 최대위한

http://www.regular-expressions.info/repeat.html#greedy

0
>>> s = ''' [[Hindi]] 
... 
... [[Madras Talkies]] 
... [[Eros International]] [[A. R. *Rehman]]''' 
>>> import re 
>>> re.findall(r'\[\[.*?\]\]', s) 
['[[Hindi]]', '[[Madras Talkies]]', '[[Eros International]]', '[[A. R. *Rehman]]'] 

또는 그룹의 캡처하여 패턴에 괄호를 추가

>>> for m in re.findall(r'\[\[(.*?)\]\]', s): 
... print m 
... 
Hindi 
Madras Talkies 
Eros International 
A. R. *Rehman 
0

당신에게 비 탐욕적인 검색이 필요하므로 정규식은 다음과 같아야합니다.

파이썬 2.7 (즉 .*?있어) 비 욕심 패턴을 지원하지 않는 경우 6,
\[\[(.*?)\]\] 

, 당신은 단지 .*를 사용할 수 있지만, 두 배 대괄호의 두 세트와 세 번째 샘플 라인은 한 번만 일치하며, 캡쳐 된 텍스트는 다음과 같습니다 :

Eros International]] [[A. R. *Rehman 

일치하지 않는 검색을 사용하면 해당 행에 두 개의 개별 일치 항목이 표시됩니다.

+0

* 욕심 많은/욕심없는 지원이없는 정규식 엔진 *을 상상할 수 있습니까? Vim은 내가 알고있는 그런 것들에 가장 가깝다.'. *?'대신에'. * \ {-}'를해야한다. (Vim과 현재의 설립 된 표준). 파이썬은'. *? '을 확실히 지원합니다. –

+0

예 - 많은 정규식 엔진이 비 욕심 많은 정규식을 지원하지 않습니다. 실제로, 고전적인 Unix 정규 표현 엔진 중 어느 것도 그들을 지원하지 않습니다. 나는 파이썬에 대해 거의 지식이 없지만 욕심이없는 정규 표현식은 비교적 새로운 발명이다. 파이썬에 추가되었을 때 조사되지 않았고, 훨씬 덜 내부화되었다. –

+0

흠, 이제 알겠습니다. POSIX가 지원하지 않는다는 것을 깨닫지 못했습니다. 나는 너무 어리다고 생각해. 어쨌든, 파이썬의're' 모듈은 POSIX 정규 표현식이 아닌 펄 정규 표현식을 기반으로합니다. –

0

가 여기 너희들 모두 같은 여분의 문자 + 존재하는 경우 문자와 일치, 나는 [ 또는 ] (최소 1) 내부 [[]]

$ python2 
>>> import re 
>>> text = '[[Eros International]] [[A. R. *Rehman]]' 
>>> re.findall('\[\[([^\[\]]+)\]\]', text) 
['Eros International', 'A. R. *Rehman'] 
>>> re.findall('\[\[([^\[\]]+)\]\]', text)[0] 
'Eros International' 
>>> re.findall('\[\[([^\[\]]+)\]\]', text)[1] 
'A. R. *Rehman' 
아니다 일치하는 대신
+2

'[[A.]와 같이, ']'(닫히지 않는) 단일 문자가있는 경우에는 작동하지 않습니다. R. [*] Reham]] '' –

+0

이것은 user1036348 스펙에 없습니다. 그에게 필요한 것은 자신의 필요에 맞는 것입니다. –

+1

* "[[['']]'"* 안에있는 모든 것을 얻고 싶습니다. 그는 그 사건도 처리하려고합니다. –

0

문자열의 처음 두 문자와 마지막 두 문자를 건너 뛰지 않는 이유가 있습니까?

s = ['[[Hindi]]', 
    '[[Madras Talkies]]', 
    '[[Eros International]]', 
    '[[A. R. *Rehman]]'] 
names = [x[2:-2] for x in s] 
+0

문자열은 [[]]
[[]] 또는 [[]]와 같이 많은 괄호로 구성되어 있습니다.
[[]] –

+0

나중에 나에게 도움이되었습니다. –