2011-09-15 77 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