所以我有一个像这样的字符串
<TEST>foo bar</TEST>
我想使用正则表达式来提取foo栏。
我目前正在使用它,但它不能正常工作
typesRegex = re.compile('<\w+>(\w+)<\w+>')
typesRegex.match(testStr)
为什么?
答案 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