我有一个文件,其中包含与该文件相似的文本(简化了行):
textfile.txt =
Domain XXX
Description AAAA
Part BBBB
Id CCCC DDDD
Next EEEE
我需要阅读大写字母并将其存储为dict中的值。以下语法似乎可行。
info = re.finditer(r"^(Domain (?P<domain_name>.*)\n)"
r"( .*\n)*"
r"( Description (?P<description>.*))\n"
r"( .*\n)*"
r"( Part (?P<part>.*))\n"
r"( .*\n)*"
r"( Id (?P<id_former>\S+) (?P<id_latter>\S+))\n"
r"( .*\n)*"
r"( Next (?P<next>\S+))\n"
r"",
textfile,
re.MULTILINE)
此正则表达式语法的工作方式与我可以使用它来找到相关信息并使用以下命令再次调用它们:
for i in info:
result["domain"]=i.group("domain_name")
result["description"]=i.group("description")
result["part"]=i.group("part")
result["id_former"]=i.group("id_former")
result["id_latter"]=i.group("id_latter")
result["next"]=i.group("next")
print(result)
{'domain': 'XXX', 'description': 'AAAA', 'part': 'BBBB', 'id_former': 'CCCC', 'id_latter': 'DDDD', 'next': 'EEEE'}
我的问题是说明行仅是可选的。我的代码似乎需要找到 ALL 行,以便将它们包括在dict输出中,如果缺少描述,则会跳过整个过程。
如果在文本中找不到描述行,如何使查询的r"( Description (?P<description>.*))\n"
部分仅返回一个空值。是否允许将其余属性存储在dict结果变量中?
答案 0 :(得分:0)
虽然您可以在Regex中执行此操作,但也可以使用if "Description " in text
检查并为True指定变量description = r"( Description (?P<description>.*))\n( .*\n)*"
或为False指定变量description = r""
。
然后可以将description
的变量+ description +
插入您的finditer
参数中。如果您解析多个块,每个块都有一个可选的Description
条目,请首先从文本文件中拆分这些块来扩展它。