我无法处理正则表达式中的条件。 我需要找到一切:
<script type="text/javascript">9089089089</script>
<script>9089089089</script>
示例:
<script type="text/javascript" src="python_files/py_dict.js"></script>
我的正则表达式无法正常工作。 请告诉我怎么做?
re.compile(r'<script.*(?<!src$).*?>(.*)</script>')
我需要找到所有不包含<script>
属性的src
标记,并显示标记内的代码。
答案 0 :(得分:1)
您可以使用BeautifulSoup查找设置src=False
的脚本标记:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
print(soup.find_all("script", src=False))
它将返回没有src属性的脚本标记:
import requests
r = requests.get("http://stackoverflow.com/questions/30414867/make-regular-expression-python/30414987#30414987")
from bs4 import BeautifulSoup
soup = BeautifulSoup(r.content)
print(set(soup.find_all("script")).difference(soup.find_all("script", src=False)))
{<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>, <script src="//cdn.sstatic.net/Js/stub.en.js?v=f07e1c0b90d5"></script>}
答案 1 :(得分:1)
如果您坚持使用基于正则表达式的解决方案:
(?s)<script\b((?:(?!src).)*?)>(.*?)</script>
import re
p = re.compile(r'(?s)<script\b((?:(?!src).)*?)>(.*?)</script>')
test_str = "<script type=\"text/javascript\" src=\"python_files/py_dict.js\"></script>\n<script type=\"text/javascript\">9089089089</script>\n<script>9089089089</script>"
print [(x.group(1), x.group(2)) for x in re.finditer(p, test_str)]
答案 2 :(得分:0)
我同意其他答案,可能有一个python包可以更好地为您的应用程序工作。但是,如果您确实想使用正则表达式,只需查找脚本标记:
re.compile(r'<script>(.*)</script>')
当您执行re.search
(或re.match
)时,如果该行中有src属性,则会返回None
。