在python中使用或与正则表达式匹配元素

在python中使用或与正则表达式匹配元素,python,regex,logical-operators,Python,Regex,Logical Operators,我在python中使用正则表达式从html中提取数据。我写的正则表达式是这样的: result = re.findall(r'<td align="left" csk="(\d\d\d\d)\d\d\d\d"><a href=.?*>(.*?)</a></td>\s+|<td align="lef(.*?)" >(.*?)</td>\s+', webpage) result=re.findall(r'\s+|(.*)\s

我在python中使用正则表达式从html中提取数据。我写的正则表达式是这样的:

result = re.findall(r'<td align="left"  csk="(\d\d\d\d)\d\d\d\d"><a href=.?*>(.*?)</a></td>\s+|<td align="lef(.*?)" >(.*?)</td>\s+', webpage)
result=re.findall(r'\s+|(.*)\s+',网页)
假设这将是遵循以下任一格式的td-

<td align="left"  csk="(\d\d\d\d)\d\d\d\d"><a href=.?*>(.*?)</a></td>\s+
\s+

(*)
这是因为td可以在该特定小区中采用不同的格式(或者有带有链接的数据,或者甚至根本没有数据)

我假设我使用的OR条件不正确-相信OR只匹配前面的“just”正则表达式和后面的“just”正则表达式,而不是两个完整的td标记之间


我的问题是,如何对其进行分组(例如使用paranthesis),以便在整个td标记之间匹配OR。

您使用的是正则表达式,但将XML与此类表达式匹配太复杂、太快

请改用HTML解析器,Python有几个选项可供选择:

  • 是标准库的一部分
  • 是一个流行的第三方库
  • 是一个快速且功能丰富的基于C的库
ElementTree示例:

from xml.etree import ElementTree

tree = ElementTree.parse('filename.html')
for elem in tree.findall('tr'):
    print ElementTree.tostring(elem)

您使用的是正则表达式,但将XML与此类表达式匹配会变得太复杂、太快

请改用HTML解析器,Python有几个选项可供选择:

  • 是标准库的一部分
  • 是一个流行的第三方库
  • 是一个快速且功能丰富的基于C的库
ElementTree示例:

from xml.etree import ElementTree

tree = ElementTree.parse('filename.html')
for elem in tree.findall('tr'):
    print ElementTree.tostring(elem)
\s+
中,应将
?*
替换为
*?

并且,为了回答您的问题,您可以使用非捕获分组来执行以下操作:

(?:first_regex)|(?:second_regex)
顺便说一句,你也可以用
\d\d\d\d
替换
\d{4}
,我认为这更容易阅读。

\s+
中,
?*
应该替换为
*?

并且,为了回答您的问题,您可以使用非捕获分组来执行以下操作:

(?:first_regex)|(?:second_regex)

顺便说一句,你也可以用
\d\d\d\d
替换
\d{4}
,我认为这更容易阅读。

请不要用正则表达式解析html。看一看!我理解正则表达式的局限性。我想知道OR在一般情况下和这种情况下是如何应用的:)请不要用正则表达式解析html。看一看!我理解正则表达式的局限性。我想知道OR在一般情况下和这种情况下是如何应用的:)只要没有嵌套,理论上它就应该工作。。。也就是说,对于解析xml/htmlas来说,regex是一个糟糕的工具选择,只要它在理论上不存在嵌套就可以了。。。也就是说,regex是解析xml/html的糟糕工具选择