3

ドキュメント内のキーワードとキーワード自体の間のテキストをキャプチャしようとしています。

たとえば、文字列に「egg」のインスタンスが複数あるとします。「egg」と「egg」の間の各作品を撮りたいです。

私が試してみました:

import re
text = "egg hashbrowns egg bacon egg fried milk egg"
re.findall(r"(/egg) (.*) (/egg)", text)

私も試しre.matchてみre.searchました。

私が通常得るものは("egg"), ("hashbrowns egg bacon egg fried milk"), ("egg")

私が取得する必要があるのはです(egg, hashbrown, egg), (egg, bacon egg), (egg, fried, milk, egg)

この件について何か助けていただければ幸いです。

4

1 に答える 1

2

欲張りでない一致を使用する必要があります。は*?欲張りでない形式ので*あり、可能な限り最小のシーケンスに一致します。また、/eggこれと完全に一致しますが、必要なだけeggなので、実際の正規表現はになり(egg) (.*?) (egg)ます。ただし、正規表現は文字列が一致するときに文字列を消費するため、中間テキストを一致させるには、先読みアサーションと後読みアサーションを使用する必要があります。この場合、(?<=egg) (.*?) (?=egg)前後に「egg」が含まれるテキストを検索しますが、中間のもののみを返します['hashbrowns', 'bacon', 'fried milk']。「egg」も一致させようとすると、かなり複雑になり、おそらく文字列を2回解析する必要があるため、実際に必要な場合にのみ、文字列に入る価値があります。

これはすべてPythonのドキュメントに記載されているので、詳細についてはこちらをご覧ください。

于 2012-12-06T15:34:27.800 に答える