2016-03-25 10 views
-1

Pythonでは、指定された式の間に何かが発生した場合にマッチしたいと思います。たとえば:環境を使わずに正規表現を引き出す

dogdogacowadogdog <-- search a word between 'a' characters 
<span>tiger<a>  <-- search for sth between <span> and <a> 

私は間だけ、この何かに合わせたいのですが、それはcowtigerはそれぞれでしょう。 rexexes使用している場合しかし、:

r'a(.*)a' 
r'<span>(.*)<a>' 

をそれは私に行全体を印刷していないだけで、この私が((.*)にマッチしているもの)を探しています。どうすればこの情報を引き出すことができますか?

+3

'(。*?)'(怠惰なマッチング)のように聞こえます。また、正規表現を使ってHTMLを解析していないことを願っています。 –

+0

're'関数を使っていますか? –

+1

キャプチャグループを使用する必要があります。 – Whitefret

答えて

3

あなたが探している正規表現はnon-greedyです。

とは何ですか?と一致していますか?

.*.+および.?可能な限り多くの文字を一致させようとします。これらの文字の後に疑問符(?)を追加すると、可能な限り少ない文字に一致させようとします。

r'a(.*?)a' 
r'<span>(.*?)<a>' 

次はマッチング自体がある:それはと.+?は、あなたの質問、あなたは正規表現のクエリとしてこれを使用する必要がありますへ戻る1.

に一致することができれば.*?は0文字に一致します。

match =re.search()を使用する場合は、グループ自体を受信するためにmatch.group(1)でなく、match.group(0)を取得する必要があります。

match.group(0)は、マッチ全体(グループの前後の部分を含む)を出力します。

match.group(1)は、第1のグループのみを与える。

match.groups()ただし、一致するのはグループ全体ではないため、match.groups()[0]が最初のグループになります。

+0

.group(1)と.group(0)を使用しない理由を簡単に説明できますか? –

+0

グループ(0)は最初のキャプチャグループ全体、つまり – Whitefret

+0

@BartłomiejSzałachです。リンクは、その動作の詳細な説明については、 're'ドキュメントの正しい部分を参照しています。 – Bharel

関連する問題