을 포함 문자열과 일치합니다. 나는 무엇을 시도했다정규식에서는이 같은 문자열과 일치하는 방법 대괄호
는 (\w+)[\s]{0,1}\[(.+)\]
이며, 그에 의해 나는 단지 첫 번째, 나는 또한 [\[(.+)\]]*
-[]*
와 마지막 \[(.+)\]
을 포장 재판을 일치시킬 수 있습니다 지금은 대괄호 안에 공백 및 '='일치하지 않을 수 있습니다.
혹시 의견 있으십니까?
을 포함 문자열과 일치합니다. 나는 무엇을 시도했다정규식에서는이 같은 문자열과 일치하는 방법 대괄호
는 (\w+)[\s]{0,1}\[(.+)\]
이며, 그에 의해 나는 단지 첫 번째, 나는 또한 [\[(.+)\]]*
-[]*
와 마지막 \[(.+)\]
을 포장 재판을 일치시킬 수 있습니다 지금은 대괄호 안에 공백 및 '='일치하지 않을 수 있습니다.
혹시 의견 있으십니까?
은 마지막 부분이 단순히 선택처럼 보인다 :
(\w+)\s?(?:\[([^\]]+)\])?
(?: ...)?
메모리 캡처를 수행하지 않고 선택적인 부분이다.
옵션은 또한 항상 공간이 의미하는 경우, 당신은뿐만 아니라 내부의 \s
를 이동할 수 있습니다 파이썬 대화식 쉘에서
(\w+)(?:\s\[([^\]]+)\])?
(\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)
당신에게 비 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
을 사용합니다.
이 정규식은 대괄호를 optionnal로 만들지 않습니다. – ibi0tux
수정. 나는 내 대답을 편집 할 것이다. 반면에 정규 표현식이 일치하지 않는다면 어쨌든 할 일이 없습니다. –