我想解析一个网页,并在Python上使用正则表达式找到特定的模式。
我的示例页面包含:
<input type="checkbox" name="some name....">
<input type="text", name="somemore name...">
<input type="radio" name="other name...">
我想查找收音机和复选框输入的所有matcihng 名称值。
<input type="checkbox" name="(.*?)".*?>
<input type="radio" name="(.*?)".*?>
但我无法弄清楚如何将这些与正则表达式合并为一个?
编辑:这个问题可能转向其他方向。但是我最好告诉我想做什么,并且我选择的正则表达式用法真的适合那个......
我必须查询订阅者并获取有关订阅者的一些基本信息以及sbscriber的可用贷款和费用列表。已关联的模块有许多脚本可以使用正则表达式完成这种工作。我也在代码的某些部分使用SGMLparser。但我有时看到SGML解析器无法解析HTML(没有挖掘它失败的原因,但基本原因是意外的char 类型错误)。因此,我必须确保我能够处理所有类型的HTML代码,或者继续使用正则表达式。
结论 :这是使用HTMLParser
的最佳选择,使用regex
很简单,这是个坏主意......那是我从这个问题得到的......但是由于问题本身更多是关于 regex matcihng 然后正则表达式在thml 中的使用,我决定< em>接受答案正在使用正则表达式...
答案 0 :(得分:4)
<input type="(checkbox|radio)" name="(?P<name>.*?)".*?>
我还在其中放置了一个捕获组名称,以便于提取。
但旧规则适用,不使用正则表达式来解析html 。它非常脆弱。如果要解析的代码在一夜之间变为<input class="aha" type="checkbox" name="some name....">
怎么办?使用HTMLParser类或BeautifulSoup。
答案 1 :(得分:2)
此?
<input type="(?:checkbox|radio)" name="(.*?)".*?>
虽然这有效......但它不是很强大......
答案 2 :(得分:2)
你永远不应该使用正则表达式来处理HTML ...这里有很多线程可以告诉你原因。也许你可以查看this之前的SO线程,其中讨论了各种用于Python的HTML解析器。