首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要帮助编写正确的解析选项

需要帮助编写正确的解析选项
EN

Stack Overflow用户
提问于 2019-02-10 18:06:40
回答 1查看 36关注 0票数 2

我需要解析如下所示的文本文件:

代码语言:javascript
复制
key : 123             
anotherKey : qwer                

oneMoreKey :         
somestring,        
somestring             

有很多这种类型的字符串,它们是由服务器自动生成的,所以我不知道它们中有多少会收到解析器

我已经解决了foo : bar这样的解析问题:

代码语言:javascript
复制
def main():
    data = {}
    file = open('file.txt')  # opening log file
    for line in file:
        if re.match(r'^\s*$', line):
            pass
        else:
            line = line.split(':')

        key = line[0].strip() 
        if len(line) == 2: # this is a workaround for lines like "foo :\n
            value = line[1].strip()
        else:
            value = 'none'

        if key in data:
            pass
        else:
            data[key] = value 

我需要获取json中的所有数据,比如

代码语言:javascript
复制
{
    key : 123,
    anotherKey : qwer,
    oneMoreKey : [somestring, somestring]
}
EN

Stack Overflow用户

回答已采纳

发布于 2019-02-10 18:16:35

某些事。是像这样吗?

代码语言:javascript
复制
import re

rx = re.compile(r'^(?P<key>\w+)\s:(?P<value>.+?)(?=^\w+\s*:|\Z)', re.S | re.M)

junk = """key : 123             
anotherKey : qwer                
foo : bar, zxc
oneMoreKey :         
somestring,        
somestring         


"""


def match(m):
    values = [val for value in re.split(r', *[\n\r]+', m) for val in [value.strip()] if val]
    return values if len(values) > 1 else m.strip()

d = {m.group('key'): match(m.group('value')) for m in rx.finditer(junk)}
print(d)

这会产生

代码语言:javascript
复制
{'key': '123', 'anotherKey': 'qwer', 'foo': 'bar, zxc', 'oneMoreKey': ['somestring', 'somestring']}

a demo on regex101.com

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54619406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档