我需要匹配不同的脚本标记,例如:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function()
{
jQuery("#gift_cards").tooltip({ effect: \'slide\'});
});
</script>
<script>dasdfsfsdf</script>
另外,我只需要获得标记和src内容,我创建了一个regex。
(<\s*?script[\s\S]*?(?:src=['"](\S+?)['"])?\B[\S\s]*?>)([\s\S]*?)(</script>)
这与最后一个脚本标记不匹配。
这有什么问题吗?
编辑:删除\B确实匹配所有的脚本标记,但是我不能在单独的组中获取src属性的内容。我需要做的是从两个类别的一组脚本标记
我需要删除脚本的开始和结束标记,但将内容保存在标签的内部,如果它是第一种类型的话,我仍然需要删除标记,但将路径保存在一个独立的表希望中,这将使它更加清晰。
发布于 2014-11-20 17:04:45
如果我同意所有关于不使用RegExp解析\B
的评论,并且当我确信我将处理的文档足够正常时,我自己也会沉溺于这种邪恶的实践中,那么尝试删除\B
,在我的测试中,它与所有三个脚本都匹配。
顺便问一下,这个“非边界”是为了什么呢?我不知道你为什么把它插进去。如果有必要的话,我不明白,请告诉我,我们会设法找到另一条路的。
编辑:为了保留src内容,尝试
(<\s*?script[\s\S]*?(?:(?:src=[\'"](.*?)[\'"])(?:[\S\s]*?))?>)([\s\S]*?)(</script>)
这对我有用,和你的其他样品核对一下。考虑到当您没有"src“属性时,您的first [\s\S]*?
已经匹配所有东西,直到>
为止,所以第二个属性只有在"src”存在并且希望匹配其他可能的属性时才有意义。
发布于 2014-11-20 16:42:20
正如iCodez的link所展示的那样,HTML不应该被regex解析,因为HTML不是一种常规语言。相反,尝试使用解析器(如BeautifulSoup
)。确保您还安装了lxml
和html5lib
,以获得最佳性能和对所有功能的访问。
pip install lxml html5lib beautifulsoup4
应该能起作用。
发布于 2014-11-27 18:32:14
对于咯咯笑,这里有一种非常简单的方法,我通过完全的意外(作为一个js字符串,它将被输入到RegExp构造函数中):
‘src=(=|=)’+ yourPathHere + '^<<\/script>‘
因此,作为一个纯RE,如下所示:
/src=(=|=“)/脚本/Script.js^
当我试图找出吞咽流的时候,我正在使用它来完成一个吞咽任务:[]
https://stackoverflow.com/questions/27044221
复制相似问题