Python正则表达式,从字符串中获取名称

时间:2013-01-18 16:58:20

标签: python regex

我有一个字符串形式:

"[NUM : NAME : NUM]: [NUM : NAME : NUM]:..."

我希望能够从此字符串中提取所有NAME。 NAME可以包含任何字符,从字母到标点符号和数字。 NUM仅以[0-9] +

的形式出现

我尝试发出此命令:

re.findall(r"\[[0-9]+\:([.]+)\:[0-9]+\]", string)

但是,不是给出我要求的内容,而是将[NUM:NAME:NUM]组合成[。] +组,这在正则表达式方面也是正确的,但不是我需要的。< / p>

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

试试这个:

re.findall(r"\[[0-9]+\:(.+?)\:[0-9]+\]", string)

?之后添加+是非贪婪的。贪婪意味着+将尽可能多地占用尽可能多的字符,但默认情况下它是贪婪的。通过添加?,您告诉它非贪婪,这意味着+将使用最少的字符数来匹配。

如果num,:和name之间没有空格,则上述操作将起作用。

如果有空格,请使用:

re.findall(r"\[[0-9]+ \: (.+?) \: [0-9]+\]", string)

答案 1 :(得分:1)

  • 第一个问题是您在字符类中包含了.。 所以,你已经失去了.的含义,它只匹配一个 dot(.)

  • 其次,在你的数字之后你不考虑空格 字符串。

  • 第三,你需要在你的.+使用不情愿的量词 中央。因此,请将([.]+)替换为(.+?)

  • 第四,您无需逃避colons (:)

你可以试试这个: -

>>> re.findall(r'\[[0-9]+[ ]*:(.+?):[ ]*[0-9]+\]', string)
6: [' NAME ', ' NAME ']