5

次に例を示します。

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つの検索行でこれを行う方法はありますか?

4

4 に答える 4

7

次のパターンを使用できます。

one(?:(?!two).)*four

追加の文字を一致させる前に、「2」と一致し始めていないことを確認します。

作業例: http://regex101.com/r/yY2gG8

于 2013-11-03T06:10:19.537 に答える
2

否定先読みアサーションを使用できます(?!...)

re.findall("one(?!.*two).*four", a)
于 2013-11-03T05:26:17.120 に答える
0

非常に単純なパターンのもう 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']]
于 2013-11-03T08:50:31.440 に答える