Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用re-findall返回任意数量的匹配组_Python_Regex - Fatal编程技术网

在python中使用re-findall返回任意数量的匹配组

在python中使用re-findall返回任意数量的匹配组,python,regex,Python,Regex,我有一个相对复杂的字符串,其中包含一组数据。我试图使用regex命令提取字符串的相关部分。我感兴趣的部分包含在方括号中,如下所示: s = '"data":["value":3.44}] lol haha "data":["value":55.34}] "data":["value":2.44}] lol haha "data":["value":56.34}]' 我构建的正则表达式如下所示: l = re.findall(r'\"data\"\:.*(\[.

我有一个相对复杂的字符串,其中包含一组数据。我试图使用regex命令提取字符串的相关部分。我感兴趣的部分包含在方括号中,如下所示:

s = '"data":["value":3.44}] lol haha "data":["value":55.34}] 
                "data":["value":2.44}] lol haha "data":["value":56.34}]'
我构建的正则表达式如下所示:

l = re.findall(r'\"data\"\:.*(\[.*\])', s)
我还以为这会回来呢

['["value":3.44}]', '["value":55.34}]', '["value":2.44}]', '["value":56.34}]']
但我得到的只是最后一个,即

['["value":56.34}]']

我怎么才能抓住他们

这是因为默认情况下量词是贪婪的。因此,
*
将匹配第一个
“数据”:
和最后一个
[
,因此只剩下一个
[…]
要匹配

通过添加
使用非贪婪量词

l = re.findall(r'\"data\"\:.*?(\[.*?\])', s)

这是因为默认情况下量词是贪婪的。所以
*
将匹配第一个
“数据”:
和最后一个
[
,因此只剩下一个
[…]
要匹配

通过添加
使用非贪婪量词

l = re.findall(r'\"data\"\:.*?(\[.*?\])', s)
您还可以使用以迭代方式提取相关内容:

import re

s = '"data":["value":3.44}] lol haha "data":["value":55.34}] "data":["value":2.44}] lol haha "data":["value":56.34}]'
for m in re.finditer(r'(\[.*?\])', s):
    print m.group(1)
输出

["value":3.44}]
["value":55.34}]
["value":2.44}]
["value":56.34}]
您还可以使用以迭代方式提取相关内容:

import re

s = '"data":["value":3.44}] lol haha "data":["value":55.34}] "data":["value":2.44}] lol haha "data":["value":56.34}]'
for m in re.finditer(r'(\[.*?\])', s):
    print m.group(1)
输出

["value":3.44}]
["value":55.34}]
["value":2.44}]
["value":56.34}]

为什么你要用正则表达式来解析JSON?@Barmar主要是因为我必须处理的数据是嵌入在JSON中的。有没有更好的方法??是的,使用JSON解析器…;)事实上,
lol haha
东西使JSON无效。
*
是贪婪的。它会抓取尽可能多的元素。你可以通过addin使它变懒g一个问号
*?
。另外,你不需要跳出冒号。为什么你要尝试使用正则表达式来解析JSON?@Barmar主要是因为我必须处理的数据是嵌入在JSON中的。有没有更好的方法?是的,使用JSON解析器…;)事实上,
哈哈哈
的东西使得JSON无效。
*
是greedy。它会抓取尽可能多的元素。你可以通过添加一个问号
*?
使它变得懒惰。而且,你不需要逃逸冒号。是的,这完全正确。多谢了,这是一个非常基本的解决方案,我很惊讶我错过了!贪婪与非贪婪匹配是更难融入其中的概念之一regex thnking,所以你忽略它并不奇怪。是的,这是完全正确的。感谢大家,这是一个非常基本的解决方案,我很惊讶我错过了!贪婪与非贪婪匹配是更难融入regex thnking的概念之一,所以你忽略它也就不足为奇了。