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

2024-04-20 05:25:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

[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],.+\])+

但是,.+规则过于笼统,最终会匹配整行。 有什么提示吗?你知道吗


Tags: 字符串test元素内容规则null括号mai
3条回答

我不确定您试图解析的数据格式以及它的来源,但它看起来像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。你知道吗

您可以考虑使用出色的模块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模块,如果是…)

下面的代码将使用\[[^]]*]输出您所请求的内容。你知道吗

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,"7. Mai 2017"]', '[2,"test","8. Mai 2018"]', '[3,"test","9. Mai 2019"]']

考虑将null更改为None,因为它匹配python表示。你知道吗

相关问题 更多 >