在Findall,Lxml中添加OR条件

时间:2014-11-09 06:50:37

标签: python xml python-2.7 lxml findall

我有以下findall表达式:

for r in p.findall('.//r'):
                 for a in r.findall('.//br'):
                    text+= " "
                 for c in r.findall('.//tab'):
                     text+= " "  

如果我遇到标记"br""tab",我想在文本变量中添加空格,但我想使用单个表达式而不是2个单独的表达式。类似的东西:

for a in r.findall('.//br'|'.//tab'):

但这会返回不支持的操作数类型错误。

TypeError: unsupported operand type(s) for |: 'str' and 'str'

这个的正确语法是什么?

1 个答案:

答案 0 :(得分:1)

代码使用|运算符作为两个字符串操作数。

>>> 'a' | 'b'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for |: 'str' and 'str'

在字符串文字中指定|。并使用xpath method

for a in r.xpath('.//br|.//tab'):

如果你想使用findall,请将两个列表连接成一个并迭代它:

for a in r.findall('.//br') + r.findall('.//table'):

或使用itertools.chain

import itertools

for a in itertools.chain(r.findall('.//br'), r.findall('.//table')):