2016-10-20 34 views
4

從這個網址查看源代碼:https://www.amazon.com/dp/073532753X?smid=A3P5ROKL5A1OLE 我想要得到的字符串var iframeContent =obj.onloadCallback = onloadCallback;正則表達式無法在2個字符串之間獲取字符串。 Python的27

之間我有這樣的正則表達式iframeContent(.*?)obj.onloadCallback = onloadCallback;

但它不工作。我不擅長正則表達式,所以請原諒我缺乏知識。

我甚至試過iframeContent(.*?)obj.onloadCallback但它不起作用。

+0

你是什麼意思與*它不工作就*?請發佈http://stackoverflow.com/help/mcve示例,並嘗試從原始數據摘錄您認爲必須匹配的字符串。一個亞馬遜頁面擁擠可能的匹配點,所以它會很難幫助你從這個問題得到你想要的。 –

回答

3

它看起來像你只是想要那個巨大的編碼字符串。我相信你的失敗有兩個原因。您沒有以DOTALL模式運行,這意味着您的.不會在多行中匹配,並且您的正則表達式因catastrophic backtracking而失敗,這可能發生在您有一個長度可變的長度匹配,匹配的字符與跟隨它的人。

這應該得到你想要的

m = re.search(r'var iframeContent = \"([^"]+)\"', html_source) 
print m.group(1) 

正則表達式只是尋找任何字符,除了雙引號[^"]在兩個雙引號之間。由於可變長度匹配和匹配不匹配任何相同的字符後,您不會遇到災難性的回溯問題。

+0

工作。 正則表達式的一點解釋將非常讚賞 – Umair

3

我懷疑輸入字符串存在多行。嘗試在搜索行中添加re.M(即re.findall('someString', text_Holder, re.M))。

2

你可以試試這個正則表達式太

(?<=iframeContent =)(.*)(?=obj.onloadCallback = onloadCallback)

你可以在this site測試檢查。

難道你使用DOTALL模式非常重要,這意味着你將有單線

相關問題