Python正则表达式提取<>之间的字符串

时间:2014-02-14 08:03:52

标签: python regex

所以我有一个像这样的字符串

<TEST>foo bar</TEST>

我想使用正则表达式来提取foo栏。

我目前正在使用它,但它不能正常工作

typesRegex = re.compile('<\w+>(\w+)<\w+>')
typesRegex.match(testStr)

为什么?

2 个答案:

答案 0 :(得分:1)

因为\w与空格不匹配。

foo bar包含空格。

同样</TEST>包含/,其中\w也不匹配。

>>> re.match(r'<\w+>([\w\s]+)</\w+>', '<TEST>foo bar</TEST>')
<_sre.SRE_Match object at 0x0000000002AFDBE8>
>>> _.groups()
('foo bar',)

答案 1 :(得分:0)

这个正则表达式更灵活,概念更简单:“直到下一个开启角括号的开头”

>>> import re                     
>>> r = re.compile(r'<test>([^<]*)</test>', re.I)
>>> r.search("<TEST>foo bar </test>").group(1)
'foo bar '
>>> r.search("<TEST>Charles Camille Saint-Saens</test>").group(1)
'Charles Camille Saint-Saens'

您应该注意\w将与- % @等等都不匹配...

您已收到许多评论,以阻止您自行解析HTML。但我发布了我的这个答案,希望你能够在解析文本时理解有限状态机的应用。 HTH