我有以下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'
这个的正确语法是什么?
答案 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')):