Python正则表达式匹配每个括号元素

3

我一直在尝试为以下字符串编写正则表达式:

[1,null,"7. Mai 2017"],[2,"test","8. Mai 2018"],[3,"test","9. Mai 2019"]

我正在尝试获取与其内容匹配的每个括号作为单个元素的尽可能多的输出,如下所示:

[1,null,"7. Mai 2017"]
[2,"test","8. Mai 2018"]
[3,"test","9. Mai 2019"]

我的最初的幼稚方法是这样的:

(\[[^d],.+\])+

然而,「.+」规则太笼统了,导致匹配整行。有什么提示吗?

1
这个字符串是从哪里来的?这是一个JSON字符串吗?请注意,在该字符串的开头和结尾添加[]可以使该特定字符串可用json.loads()进行加载。 - alecxe
你可以使用 r'\[[^]]*]' - anubhava
1
我认为你也可以使用ast.literal_eval()函数。 - dot.Py
null 替换为 None 并使用 literal_eval,得到的结果是 ([1, None, '7. Mai 2017'], [2, 'test', '8. Mai 2018'], [3, 'test', '9. Mai 2019']) - Bill Bell
偶尔被提醒一下这个是件好事。 - Bill Bell
显示剩余2条评论
3个回答

1
以下代码将使用\[[^]]*]输出您请求的内容。
import re
regex = r'\[[^]]*]'
line = '[1,null,"7. Mai 2017"],[2,"test","8. Mai 2018"],[3,"test","9. Mai 2019"]'
row = re.findall(regex, line)
print(row)

输出:

['[1,null,"2017年5月7日"]', '[2,"test","2018年5月8日"]', '[3,"test","2019年5月9日"]']

考虑将 null 改为 None,因为它与 Python 表示匹配。


1
我不确定您要解析的数据格式和来源,但它看起来类似于JSON。对于这个特定的字符串,在字符串开头和结尾添加方括号可以使其可加载为JSON格式。
In [1]: data = '[1,null,"7. Mai 2017"],[2,"test","8. Mai 2018"],[3,"test","9. Mai 2019"]'

In [2]: import json

In [3]: json.loads("[" + data + "]")
Out[3]: 
[[1, None, u'7. Mai 2017'],
 [2, u'test', u'8. Mai 2018'],
 [3, u'test', u'9. Mai 2019']]

请注意,null 在 Python 中变成了 None

1
你可以考虑使用优秀的模块 pyparsing 来实现这个功能:
import pyparsing 

for match in pyparsing.originalTextFor(pyparsing.nestedExpr('[',']')).searchString(exp):
    print match[0]
[1,null,"7. Mai 2017"]
[2,"test","8. Mai 2018"]
[3,"test","9. Mai 2019"]

(除非它确实是JSON - 如果是,请使用JSON模块...)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接