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

Python正则表达式,从字符串获取名称,python,regex,Python,Regex,我有一个字符串,格式如下: "[NUM : NAME : NUM]: [NUM : NAME : NUM]:..." 我希望能够从这个字符串中提取所有名称。名称可以有任何字符,从字母到标点符号和数字。NUM的形式仅为[0-9]+ 我尝试发出以下命令: re.findall(r"\[[0-9]+\:([.]+)\:[0-9]+\]", string) 但是它没有给出我所要求的,而是将几个[NUM:NAME:NUM]集合到[.]+组中,这在正则表达式方面也是正确的,但不是我所需要的 任何帮助都将

我有一个字符串,格式如下:

"[NUM : NAME : NUM]: [NUM : NAME : NUM]:..."
我希望能够从这个字符串中提取所有名称。名称可以有任何字符,从字母到标点符号和数字。NUM的形式仅为[0-9]+

我尝试发出以下命令:

re.findall(r"\[[0-9]+\:([.]+)\:[0-9]+\]", string)
但是它没有给出我所要求的,而是将几个[NUM:NAME:NUM]集合到[.]+组中,这在正则表达式方面也是正确的,但不是我所需要的

任何帮助都将不胜感激。

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

  • 第二,你没有考虑在你的表中数字后面加空格 绳子

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

  • 第四,你不需要逃避你的
    冒号(:)

您可以尝试以下方法:-

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

re.findall(r"\[[0-9]+\:(.+?)\:[0-9]+\]", string)
+
之后添加
是非贪婪的。贪婪意味着
+
在仍然匹配的情况下将使用尽可能多的字符,默认情况下是贪婪的。通过添加
您告诉它是非贪婪的,这意味着
+
将使用最小数量的字符进行匹配

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

如果有空格,则使用:

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

谢谢Rohit,您的版本运行良好,您的解释帮助我更好地理解regex。