-4

とを含むと fault-filtertime 5(.*)! THの間のすべてを一致させるために正規表現を使用します。ただし、これは何らかの理由で機能しません。なぜアイデアはありますか?fault-filtertime 5! TH

4

2 に答える 2

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'
于 2013-02-26T14:45:03.227 に答える
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)
于 2013-02-26T17:12:13.767 に答える