我有一个相对复杂的字符串,其中包含一堆数据。我试图使用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}]']
我怎样才能抓住所有人?
答案 0 :(得分:2)
这是因为默认情况下量词是贪婪的。因此.*
将匹配第一个"data":
和最后一个[
之间的所有内容,因此只剩下一个[...]
匹配。
通过添加?
来使用非贪婪量词。
l = re.findall(r'\"data\"\:.*?(\[.*?\])', s)
答案 1 :(得分:1)
您还可以使用finditer
迭代地提取相关内容:
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}]