2017-07-01 108 views
-1

我有以下字符串:如何從html文本中捕獲兩個子字符串?

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">(.+)< 其中括號中有兩個捕獲組(當我單獨使用它們時它們工作正常),但問題在於它們之間的.+未按預期工作。

任何建議表示讚賞。

+1

它,因爲你應該使用的東西比正則表達式這個工作,其他「不能按預期工作。」 – horcrux

+0

喜歡什麼?爲什麼? – Nickpick

+1

就像一個HTML解析器。 [這就是爲什麼](https://stackoverflow.com/a/1732454/4607733)! – horcrux

回答

1

您在使用點的是「貪婪」,所以他們抓住儘可能他們可能可以(和你不在這種情況下實際上並不希望這樣)。

您可以將捕獲組量化符更改爲「懶惰」,但對捕獲組使用否定字符類(語法[^character])會更有效。

的點你的兩個拍攝組之間是罰款是「貪婪」,因爲當它遇到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\=\"(.+?)\"[^\0]*class\=\"odds\".*\>(.+?)\<
https://regex101.com/r/4loeLv/1

或者

如果你想捕捉第一人的名字裏data-event-title=""然後
data\-event\-title\=\"(.+?) vs.*?\"[^\0]*class\=\"odds\".*\>(.+?)\<
https://regex101.com/r/4loeLv/2

+0

爲什麼我需要把'[^ \ 0] *'? – Nickpick

+0

在給定的文本中有很多不同的字符,這可以是除null = \ 0之外的任何東西(包括'\ s','\ t','\ n','\ r')。 – lkdhruw

0

我用替代垂直條管道符號(|)。 read more here

此正則表達式你想要做什麼:

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

看到這裏保存的正則表達式regex101

相關問題