正则表达式如何使用'或'进行字符串匹配

时间:2011-11-21 10:25:34

标签: python regex

我想解析一个网页,并在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>接受答案正在使用正则表达式...

3 个答案:

答案 0 :(得分:4)

<input type="(checkbox|radio)" name="(?P<name>.*?)".*?>

我还在其中放置了一个捕获组名称,以便于提取。

但旧规则适用,不使用正则表达式来解析html 。它非常脆弱。如果要解析的代码在一夜之间变为<input class="aha" type="checkbox" name="some name....">怎么办?使用HTMLParser类或BeautifulSoup。

http://docs.python.org/library/htmlparser.html

http://www.crummy.com/software/BeautifulSoup/

答案 1 :(得分:2)

此?

<input type="(?:checkbox|radio)" name="(.*?)".*?>

虽然这有效......但它不是很强大......

答案 2 :(得分:2)

你永远不应该使用正则表达式来处理HTML ...这里有很多线程可以告诉你原因。也许你可以查看this之前的SO线程,其中讨论了各种用于Python的HTML解析器。