7

正規表現を使用してパターンの最後の出現を照合したいと思います。

このように構成されたテキストがあります:

Pellentesque habitant morbi tristique senectus et netus et
lesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae
ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam
egestas <br>semper<br>tizi ouzou<br>Tizi Ouzou<br>                        

<br>私の場合<br>Tizi Ouzou<br>、2つの間の最後のテキスト、理想的にはTizi Ouzou文字列を一致させたい

最後の後にいくつかの空白があることに注意してください<br>

私はこれを試しました:

<br>.*<br>\s*$

ただし、最初<br>から最後まですべてを選択します。

NB: 私は Python を使用しており、正規表現をテストするためにpythexを使用しています

4

6 に答える 6

13

組み込み関数を使用した非正規表現アプローチstr:

text = """
Pellentesque habitant morbi tristique senectus et netus et
lesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae
ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam
egestas <br>semper<br>tizi ouzou<br>Tizi Ouzou<br>       """

res = text.rsplit('<br>', 2)[-2]
#Tizi Ouzou
于 2013-08-24T19:45:21.573 に答える
7

関連する質問を見てください: HTML を regex で解析すべきではありません。代わりに正規表現パーサーを使用してください。Python の場合は、 Beautiful Soupが最適だと聞きました。

とにかく、正規表現でやりたい場合は、 が.*別の を通過できないことを確認する必要があります<br>。そのために、各文字を消費する前に先読みを使用して、別の文字を開始しないようにすることができ<br>ます。

<br>(?:(?!<br>).)*<br>\s*$
于 2013-08-24T19:46:51.703 に答える
6

文字クラスを減らして貪欲な量指定子を使用できます (あなたの間にタグがないと仮定します<br>):

<br>([^<]*)<br>\s*$

また

<br>((?:[^<]+|<(?!br>))*)<br>\s*$

内部にタグを許可します。

検索する文字列が含まれていTizi Ouzouないため<br>、最初のキャプチャ グループを抽出できます。

于 2013-08-24T19:44:16.443 に答える
4

[^<>]*代わりにどうですか.*

import re


text = """Pellentesque habitant morbi tristique senectus et netus et
lesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae
ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam
egestas <br>semper<br>tizi ouzou<br>Tizi Ouzou<br> """


print re.search('<br>([^<>]*)<br>\s*$', text).group(1)

版画

Tizi Ouzou
于 2013-08-24T19:46:29.280 に答える
3

試す:

re.match(r'(?s).*<br>(?=.*<br>)(.*)<br>', s).group(1)

最初に最後まですべてのデータを消費し、その後に<br>別のデータがあることを先読みで確認するまでバックトラックし、それらの間のコンテンツを抽出します。<br>

次の結果が得られます。

Tizi Ouzou

編集:先読みする必要はありません。m.buettnerのコメントに基づく代替 (同じ結果)

re.match(r'(?s).*<br>(.*)<br>', s).group(1)
于 2013-08-24T19:44:45.900 に答える