制作正则表达式Python

时间:2015-05-23 16:12:12

标签: python regex

我无法处理正则表达式中的条件。 我需要找到一切:

<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标记,并显示标记内的代码。

3 个答案:

答案 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>

Python code

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