我试图从jsp页面(格式错误的xml)中提取一些信息(不需要递归),类似于:
<td>
<html:button ...></html:button>
<html:submit ...></html:submit></td>
正则表达式:
<html:(button|submit|cancel)[\s\S]*?</html:(button|submit|cancel)>
re.findall()给我一个元组列表,如下:
[('button','button'),('button','button')]
我从文档中理解的是正确的,但我希望得到更多类似的内容:
["<html:button ...>","<html:button ...>"]
获得预期结果的恰当方法是什么?
答案 0 :(得分:3)
除了正则表达式可能不是您想要执行此操作的事实之外,您还希望使用括号将所需的位放入组中。如果您希望所有内容都达到结束</html:whatever>
标记,那么您需要这样的内容:
(<html:(button|submit|cancel)[\s\S]*?)</html:(button|submit|cancel)>
如果您只想要<html:button>
位,请使用:
(<html:(button|submit|cancel)>)[\s\S]*?</html:(button|submit|cancel)>
e.g。
这
<html:button>foobar</html:submit>
你得到:
('<html:button>', 'button', 'submit')
如果您想从上面获取foobar
,请使用:
(<html:(button|submit|cancel)>)([\s\S]*?)</html:(button|submit|cancel)>
得到:
('<html:button>', 'button', 'foobar', 'submit')
请注意,通常不能匹配开始和结束标记(请注意,<html:button>
已打开,</html:submit>
在上面的示例中已关闭)。如果您需要这样做,请使用正确的解析器。
答案 1 :(得分:1)
您的(button|submit|cancel)
被捕获,因此请在?:
(?:
>>> re.findall('<html:(?:button|submit|cancel)[\s\S]*?</html:(?:button|submit|cancel)>',TheHTMLWhichShouldntParseWithRegex)
['<html:button ...></html:button>', '<html:submit ...></html:submit>']