0

我正在尝试从类似于以下内容的 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 ...>"]

获得我期望的结果的适当方法是什么?

4

2 回答 2

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)>

例如

<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>关闭)。如果您需要这样做,请使用适当的解析器。

于 2010-03-03T10:30:06.440 回答
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>']
于 2010-03-03T10:30:42.277 回答