在python中使用或与正则表达式匹配元素
我在python中使用正则表达式从html中提取数据。我写的正则表达式是这样的:在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
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的库
from xml.etree import ElementTree
tree = ElementTree.parse('filename.html')
for elem in tree.findall('tr'):
print ElementTree.tostring(elem)
您使用的是正则表达式,但将XML与此类表达式匹配会变得太复杂、太快 请改用HTML解析器,Python有几个选项可供选择:
- 是标准库的一部分
- 是一个流行的第三方库
- 是一个快速且功能丰富的基于C的库
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的糟糕工具选择