2013-02-26 3 views
-4

정규식 fault-filtertime 5(.*)! TH을 사용하여 fault-filtertime 5! TH 사이의 모든 항목을 일치시킵니다. 그러나 이것은 어떤 이유로 작동하지 않습니다. 어떤 아이디어?정규식이 의도 한 라인과 일치하지 않습니다.

+2

주세요 * 세부*. 입력, 예상 출력, '작동하지 않는 것'은 무엇입니까? 우리는 모두 여기에 가서 추측 할 수 있지만 더 많은 정보를 가지고 좀 더 확실한 답을 줄 수 있습니다. –

+1

'fault-filtertime 5 (. *?)를 사용하십시오! TH' – Boynux

+0

정말 여기 아래 표를 이해하지 못합니다. 단지 "세부 사항"을 제공하지 않았기 때문입니까? – Cemre

답변

1

당신이 여러 데이터를 가지고, 또는 다른 제어 문자를 포함하여,이 같은 re.DOTALL를 사용해야하는 경우 :

import re 

data = """ 
fault-filtertime 5 
foo 
bar 
baz 
! TH 
""" 

regex_str = "fault-filtertime 5(.*?)! TH" 
regex = re.compile(regex_str, re.DOTALL) 
result = re.search(regex, data) 
print result.group(1) 
5

수정 자는 욕심이 많습니다. 허용하면 일치시킬 수있는 최대치와 일치합니다. 입력 텍스트에 ! TH이 두 번 이상 표시되는 경우 .*까지의 모든 내용과 일치합니다. 마지막은입니다.

욕심 꾸러기 일치를 끄려면 *?을 사용하십시오. .*? 대신 문자의 최소 수와 일치합니다

>>> import re 
>>> re.search('fault-filtertime 5(.*)! TH', 'fault-filtertime 5 foo bar baz! TH fault-filtertime 5 spam ham eggs! TH').group(1) 
' foo bar baz! TH fault-filtertime 5 spam ham eggs' 
>>> re.search('fault-filtertime 5(.*?)! TH', 'fault-filtertime 5 foo bar baz! TH fault-filtertime 5 spam ham eggs! TH').group(1) 
' foo bar baz' 
관련 문제