2013-06-13 1 views
0

을 포함 문자열과 일치합니다. 나는 무엇을 시도했다정규식에서는이 같은 문자열과 일치하는 방법 대괄호

(\w+)[\s]{0,1}\[(.+)\]이며, 그에 의해 나는 단지 첫 번째, 나는 또한 [\[(.+)\]]*-[]*와 마지막 \[(.+)\]을 포장 재판을 일치시킬 수 있습니다 지금은 대괄호 안에 공백 및 '='일치하지 않을 수 있습니다.

혹시 의견 있으십니까?

답변

3

은 마지막 부분이 단순히 선택처럼 보인다 :

(\w+)\s?(?:\[([^\]]+)\])? 

(?: ...)? 메모리 캡처를 수행하지 않고 선택적인 부분이다.

옵션은 또한 항상 공간이 의미하는 경우, 당신은뿐만 아니라 내부의 \s를 이동할 수 있습니다 파이썬 대화식 쉘에서

(\w+)(?:\s\[([^\]]+)\])? 
0
(\w+)\s*(\[.+?\])? 

테스트 :

>>> re.match(r'(\w+)\s*(\[.+?\])?', 'firstword [foo = bar]').groups() 
('firstword', '[foo = bar]') 
>>> re.match(r'(\w+)\s*(\[.+?\])?', 'firstword [foo = bar').groups() 
('firstword', None) 
>>> re.match(r'(\w+)\s*(\[.+?\])?', 'firstword foo = bar').groups() 
('firstword', None) 
>>> re.match(r'(\w+)\s*(\[.+?\])?', 'firstword foo = bar]').groups() 
('firstword', None) 
>>> re.match(r'(\w+)\s*(\[.+?\])?', 'firstword').groups() 
('firstword', None) 
0

당신에게 비 qreedy 한정 기호를 사용할 수 있습니다. Perl 확장 표기법 :

s/^  # Beginning of string. You might not need this. 
    (\w+) # Capture a word. 
    \s*  # Optional spaces. 
    (?:  # Non-capturing group. 
     \[  # Literal bracket. 
     .*?  # Any number of characters, but as few as possible, 
       # so stopping before: 
     \]  # Literal bracket 
    )?   # End the group, and make it optional as requested. 
/
    $1  # The captured word. 
/x   # Allow the extended notation. 

필요에 따라 수정하십시오. 일부 엔진은 $1 대신 \1을 사용합니다.

+0

이 정규식은 대괄호를 optionnal로 만들지 않습니다. – ibi0tux

+0

수정. 나는 내 대답을 편집 할 것이다. 반면에 정규 표현식이 일치하지 않는다면 어쨌든 할 일이 없습니다. –

관련 문제