首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式以匹配python中的不同脚本标记

正则表达式以匹配python中的不同脚本标记
EN

Stack Overflow用户
提问于 2014-11-20 16:10:28
回答 3查看 1.2K关注 0票数 0

我需要匹配不同的脚本标记,例如:

代码语言:javascript
运行
复制
 <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。

代码语言:javascript
运行
复制
(<\s*?script[\s\S]*?(?:src=['"](\S+?)['"])?\B[\S\s]*?>)([\s\S]*?)(</script>)

这与最后一个脚本标记不匹配。

这有什么问题吗?

编辑:删除\B确实匹配所有的脚本标记,但是我不能在单独的组中获取src属性的内容。我需要做的是从两个类别的一组脚本标记

  1. 其中一个具有src属性,具有指向实际脚本的路径。
  2. 第二,没有标准内联javascript的src属性。

我需要删除脚本的开始和结束标记,但将内容保存在标签的内部,如果它是第一种类型的话,我仍然需要删除标记,但将路径保存在一个独立的表希望中,这将使它更加清晰。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-20 17:04:45

如果我同意所有关于不使用RegExp解析\B的评论,并且当我确信我将处理的文档足够正常时,我自己也会沉溺于这种邪恶的实践中,那么尝试删除\B,在我的测试中,它与所有三个脚本都匹配。

顺便问一下,这个“非边界”是为了什么呢?我不知道你为什么把它插进去。如果有必要的话,我不明白,请告诉我,我们会设法找到另一条路的。

编辑:为了保留src内容,尝试

代码语言:javascript
运行
复制
(<\s*?script[\s\S]*?(?:(?:src=[\'"](.*?)[\'"])(?:[\S\s]*?))?>)([\s\S]*?)(</scrip‌​t>)

这对我有用,和你的其他样品核对一下。考虑到当您没有"src“属性时,您的first [\s\S]*?已经匹配所有东西,直到>为止,所以第二个属性只有在"src”存在并且希望匹配其他可能的属性时才有意义。

票数 1
EN

Stack Overflow用户

发布于 2014-11-20 16:42:20

正如iCodez的link所展示的那样,HTML不应该被regex解析,因为HTML不是一种常规语言。相反,尝试使用解析器(如BeautifulSoup )。确保您还安装了lxmlhtml5lib,以获得最佳性能和对所有功能的访问。

代码语言:javascript
运行
复制
pip install lxml html5lib beautifulsoup4

应该能起作用。

票数 3
EN

Stack Overflow用户

发布于 2014-11-27 18:32:14

对于咯咯笑,这里有一种非常简单的方法,我通过完全的意外(作为一个js字符串,它将被输入到RegExp构造函数中):

‘src=(=|=)’+ yourPathHere + '^<<\/script>‘

因此,作为一个纯RE,如下所示:

/src=(=|=“)/脚本/Script.js^

当我试图找出吞咽流的时候,我正在使用它来完成一个吞咽任务:[]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27044221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档