2011-09-15 86 views
0

我有一個包含document.write javascript命令的網頁。這些命令的構成就像:Python正則表達式匹配OpenWindow.document.write([this])

OpenWindow.document.write("text that I want") 

我想用正則表達式返回一個列表或所有[文字,我想]的匹配對象。有人可以幫我嗎?

示例代碼至今:

f = open("filename",'r') 
allhtml = f.read() 
results = re.findall(the_regex,allhtml) 

for s in results: 
    Do Stuff 
+0

基本上,我試圖重構由一系列OpenWindow.document.write javascript調用創建的頁面,其中OpenWindow是除HTML之外的窗口。 – Jeremy

回答

0

這個是什麼?

import re 

html = '...... your html page .... ' 
textlist = re.findall(r'OpenWindow\.document\.write\(([^\)]*)\)', html) 

print "".join(textlist) 
+0

那麼,這比我最終使用的更好!謝謝。 – Jeremy

0
In [69]: s 
Out[69]: 'OpenWindow.document.write("text that I want")' 

In [70]: r=re.findall(r'"(.*)"',s) 

In [71]: r 
Out[71]: ['text that I want'] 

或做一些與此類似:

for line in my_html: 
    if "OpenWindow.document.write" in line: 
     r=re.search(r'"(.*)"',s) 
     print r.group() 
+0

感謝您的回覆,但我想要的文字實際上並不放在方括號中,我會解決這個問題。 – Jeremy

+0

@Jeremy - 已更新 –

+0

謝謝,但這仍然會返回任何括號內的文本,而不僅僅是OpenWindow.document.write之前的文本,這正是我真正想要的。 – Jeremy

1

你可以嘗試一個正則表達式是這樣的:

OpenWindow\.document\.write\s*\(\s*"((?:[^"\\]+|\\.)*)"\s*\) 

如果它總是一個簡單的雙引號的字符串。

它與逃逸,而像匹配的東西:

OpenWindow.document.write("foo(\"bar\") baz('')") 

請注意,這不是愚弄證明:JS的意見,行情,正則表達式,其他HTML只是幾件事情,可以給你無效的結果。

+0

我看到了這一秒,否則我會接受它。 JS是計算機生成的,所以沒有任何複雜性。 – Jeremy