使用python / re.match的正则表达式不起作用

时间:2016-03-13 23:30:26

标签: python regex regex-negation regex-greedy

我有像这样的stringText

sText ="""<firstName name="hello morning" id="2342"/>
<mainDescription description="cooking food blog 5 years"/>
<special description="G10X, U16X, U17X, G26X, C32X, G34X, G37X, U39X, C40X, G46X,C49X, U54X, U55X, A58X"/> 
"""

我想收到:

  烹饪食品博客5年

我尝试了很多不同的正则表达式

像:

p = re.compile('<mainDescription description=\"([^\"]+)\"\/>')
print re.match(p, sText)

p = re.compile(ur'<mainDescription description="([^"]+)"\/>')

并使用(。+) 根据{{​​3}}我的正则表达式应该正常工作,但事实并非如此。 我不知道为什么

3 个答案:

答案 0 :(得分:1)

尝试使用findall():

print re.findall('<mainDescription description=\"([^\"]+)\"\/>', sText)

输出:

['cooking food blog 5 years']

答案 1 :(得分:0)

似乎是因为您使用的是re.match()而不是re.search()sText ="""<firstName name="hello morning" id="2342"/> <mainDescription description="cooking food blog 5 years"/> <special description="G10X, U16X, U17X, G26X, C32X, G34X, G37X, U39X, C40X, G46X,C49X, U54X, U55X, A58X"/> """ p = re.compile('<mainDescription description=\"([^\"]+)\"\/>') print re.search(p, sText).group(1) "搜索任何地方时从字符串的开头进行搜索。这有效:

'

顺便说一下,如果您使用re.search('<mainDescription description="([^"]+)"/>', sText) ,则不需要转义引号(sudo lsof -t -i tcp:80 | xargs kill -9 ),这意味着这就足够了:

sudo lsof -t -i tcp:80
kill -9 xxxxxxx

答案 2 :(得分:0)

re.match会返回一个match对象,您需要从该对象中检索所需的组。

sText ="""<firstName name="hello morning" id="2342"/>
<mainDescription description="cooking food blog 5 years"/>
<special description="G10X, U16X, U17X, G26X, C32X, G34X, G37X, U39X, C40X, G46X,C49X, U54X, U55X, A58X"/> 
"""
r = re.compile("""<mainDescription description="(?P<description>[^"]+)"\/>""")
m = r.match(sText)
print m.group('description')

请注意,也可以使用索引访问组(在本例中为0),但我更喜欢指定关键字。