我有一个字符串形式:
"[NUM : NAME : NUM]: [NUM : NAME : NUM]:..."
我希望能够从此字符串中提取所有NAME。 NAME可以包含任何字符,从字母到标点符号和数字。 NUM仅以[0-9] +
的形式出现我尝试发出此命令:
re.findall(r"\[[0-9]+\:([.]+)\:[0-9]+\]", string)
但是,不是给出我要求的内容,而是将[NUM:NAME:NUM]组合成[。] +组,这在正则表达式方面也是正确的,但不是我需要的。< / p>
非常感谢任何帮助。
答案 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 ']