在python中解析长字符串

2024-10-03 13:19:16 发布

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

我尝试在python中使用regex解析一个长字符串。 字符串是这样的:

 Output = "Name:AmelieAge:30Nationality:english"

基本上,字段名是固定的,但我可以有一个更复杂的字符串,其中包含重复的数据,例如:

^{pr2}$

我正在寻找一种方法来获得这样的结构化数据:

Name:Amelie
Age:30
Nationality:english

Name:David
Age:50
Nationality:Irish

如果您有任何关于正则表达式的建议,以便解析这个长字符串。在

仅供参考:字符串大小是任意的


Tags: 数据方法字符串nameoutputageenglishregex
3条回答

可以从字符串创建字典列表,如下所示:

import re, itertools

Output = "Name:AmelieAge:30Nationality:englishName:NikeAge:20Nationality:frenshName:davidAge:50Nationality:Irish"

entries = []
i_split = iter(re.split("(Name|Nationality|Age):", Output)[1:])

for entry in iter(lambda: list(itertools.islice(i_split, 6)), []):
    i_entry = iter(entry)
    d_entry = {k:next(i_entry) for k in i_entry}
    entries.append(d_entry) 

# Display the whole list
print entries
print

# Display entries one at a time
for entry in entries:
    for k, v in entry.items():
        print "{}:{}".format(k,v)
    print   

这将为您提供以下输出:

^{pr2}$

尝试:

>>> re.findall("[A-Z][a-z]+\:[\w\d][a-z\d]+", Output)
['Name:Amelie', 'Age:30', 'Nationality:english']

我假设所有的键都以大写字母开头,而值除了第一个外没有大写字母。在

re.findall("[A-Z]\w+:[\d\w]+(?=[A-Z]\w+|$)", Output)

使用前瞻断言是最好的方法。此正则表达式将捕获以大写字母开头并以小写或大写形式继续的字符串,然后:之后,它将捕获任何数字或字母,直到留下一个以大写字母开头并以字母结尾的字符组,或者直到到达文本的结尾。在

即使在@bigOTHER的评论中提到的情况下,也可以正确地捕捉到组。在

相关问题 更多 >