次に例を示します。
a = "one two three four five six one three four seven two"
m = re.search("one.*four", a)
私が欲しいのは、間に部分文字列「2」を含まない「1」から「4」までの部分文字列を見つけることです。答えは次のようになります: m.group(0) = "one three four", m.start() = 28, m.end() = 41
1つの検索行でこれを行う方法はありますか?
次のパターンを使用できます。
one(?:(?!two).)*four
追加の文字を一致させる前に、「2」と一致し始めていないことを確認します。
否定先読みアサーションを使用できます(?!...)
。
re.findall("one(?!.*two).*four", a)
非常に単純なパターンのもう 1 つのライナー
import re
line = "one two three four five six one three four seven two"
print [X for X in [a.split()[1:-1] for a in
re.findall('one.*?four', line, re.DOTALL)] if 'two' not in X]
私にくれます
>>>
[['three']]