我使用以下正则表达式来检测html文件中的开始和结束脚本标记:
简而言之:<;script NOT<;/s>;NOT<;/s<;/script>;
它可以工作,但需要很长时间才能检测到<;script>;,
即使是几分钟或几小时的长串
精简版甚至适合长串:
^{pr2}$
不过,我也将扩展模式用于其他标记,例如<;a>;<;和>;可以作为属性值
python测试:import re
pattern = re.compile('', re.I + re.DOTALL)
re.search(pattern, '1122').group()
re.search(pattern, '').group()
我怎样才能修好它?
regex的内部部分(在<;script>;之后)应该更改并简化。在
注:)预计你的答案是错误的,比如在html解析中使用regex,
我非常了解许多html/xml解析器,而且在经常损坏的html代码中,regex在这里非常有用。在
评论:
好吧,我需要处理:
每个<;a<;文档类似这个边界=“5px;”>;
方法是将解析器和正则表达式一起使用
beauthoulsoup只有2k行,它不处理每个html,只是从sgmllib扩展regex。在
主要原因是我必须知道每个标签开始和停止的确切位置。每一个损坏的html都必须被处理。
BS并不完美,有时会发生:
美化组('<;scriPt\n\n>;a<;aa>;s<;/scriPt>;')。findAll('scriPt')==[]
@赛利安:
如您所知,原子分组在python的re中不可用。
所以非极客的一切都是?until<;\s*/\s*tag\s*>;是这次的赢家。在
我知道在这种情况下这并不完美:
搜索('<;\s*脚本。?<;\s/\s*script\s*>;','<;script<;/script>;狗屎<;/script>;')。group()
但我可以在下一个解析中处理被拒绝的tail。
很明显,用regex解析html并不是一场战斗。在