2017-07-01 43 views
-1

は、私は次の文字列があります。htmlテキストから2つの部分文字列を取り込む方法は?

data-event-title="Yuichi Sugita* vs Adrian Mannarino"> 
           <span class="odds-container"> 
                  <b class="odds">1/12</b> 
                    </a> 

をそして私はYuichi Sugita1/12をキャプチャしたいと思います。そのために次の正規表現を作成しました。 ata-event-title="(.+)".+ class="odds">(.+)< 括弧内に2つのキャプチャグループがあります(別々に使用すると問題なく動作します)が、その間の.+が期待どおりに動作しないという問題があります。

ご迷惑をおかけして申し訳ございません。

+1

は、それが「期待通りに動作しません」。 – horcrux

+0

何が好きですか?なぜ? – Nickpick

+1

HTMLパーサーと似ています。 [だからこそ](https://stackoverflow.com/a/1732454/4607733)! – horcrux

答えて

1

ここに保存された正規表現を参照してください。この場合、実際にそれが必要です)。

キャプチャグループ数量子を「遅延」に変更できますが、ネガティブキャラクタクラス(構文[^character])をキャプチャグループに使用する方が効率的です。

2つのキャプチャグループ間のドットは、とにかくclass="odds">に遭遇したときに停止するため、「欲張り」となっても問題ありません。

サンプル入力に改行があると仮定すると、パターンにsフラグを使用しない限り、改行文字でドットが停止します。これは、キャプチャします

r"data-event-title=\"([^*]+).*class=\"odds\">([^<]+)"s 

  1. だけ*の最初の出現の前にdata-event-title="エンディングの後に続く部分文字列を、これを使用してください。
  2. 次の部分文字列class="odds">が最初の<の直前に終わります。

ここはPython regex pattern demoです。


フルdata-event-title属性値が必要な場合

、これは Yuichi Sugita* vs Adrian Mannarinoをキャプチャします:あなたはこの仕事のために正規表現以外の何かを使用する必要がありますので、

r"data-event-title=\"([^\"]+).*class=\"odds\">([^<]+)"s 
1

あなたはdata-event-title=""1/12内のテキストをキャプチャする場合は、data-event-title=""内で最初に人の名前をキャプチャしたい場合は、 https://regex101.com/r/4loeLv/2


data\-event\-title\=\"(.+?) vs.*?\"[^\0]*class\=\"odds\".*\>(.+?)\<
その後、正規表現
data\-event\-title\=\"(.+?)\"[^\0]*class\=\"odds\".*\>(.+?)\<
https://regex101.com/r/4loeLv/1

それとも

を使用

+0

なぜ[[^ \ 0] * 'を入れる必要がありますか? – Nickpick

+0

与えられたテキストには非常に多くの異なる文字があり、これは 'null = \ 0'以外のもの(' \ s'、 '\ t'、' \ n'、 '\ r')を含むものです。 – lkdhruw

0

私は垂直バーまたはパイプ記号交代を使用(|)。 read more here

この正規表現は、あなたが欲しいものを行います。

>(.*)<|data-event-title="([^*]*.).*" 

は、彼らはおそらくすることができます(そして、あなたドン限り取り込むように、ドットのご利用には「貪欲」であるregex101

関連する問題