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。