【发布时间】:2020-01-12 19:34:36
【问题描述】:
我有许多来自软件程序的输出文本文件,它们将部分标题、描述和表格混合在同一个文件中。我需要找到一种可靠地提取数据的方法。该文件大致如下所示:
section title, a=1
description, description, description
x,y,z,p
(m),(m),(m),(psi)
0,0,0
0,0,1
...
section title, a=2
description, description, description
a,k,r
(ft),(mm),(f)
4,4,1
0,0,1
section title, a=3
description, description, description
...
到目前为止,我的方法是将所有内容读入字符串:
with open(file) as f:
raw_data = f.read().strip()
然后使用re 库,例如:
re.split(r"section title,\s+a=\d+", raw_data)
问题是,a 的值充当分隔符并消失,而我实际上想保留它而不是在它之前拆分。
我知道如果我将它分组为re.split(r"section title,\s+a=\d+", raw_data),我可以“保留”它,但是我有一个不匹配的数据列表,其中每个其他项目都是一个小数字,并且表数据都是穿插的,这并不理想,即:
['1', '<long string with table>', '2', '<another long string>', '3', ...]
理想情况下,输出将是我可以将 a 值作为键并将表数据作为其值的东西。我可以用我正在使用的技术来管理它,但这似乎是错误的方法。
我不确定处理此类事情的正常方法是什么,所以我正在寻找其他选择和更优雅的解决方案。
【问题讨论】:
-
不包括拆分中的号码
section title,\s+a=怎么样? -
另一种方法是不使用拆分,只是一个正常的查找类型的东西
section title, a=(\d+)\s*((?:(?!section title, a=)[\S\s])*?)\s* -
@sln:第一个建议是真的,谢谢。但是,假设我需要保留整个标题及其包含的信息,我将如何解决这是我希望弄清楚的事情
-
@sln
?!可能是我正在寻找的答案;我从来没有使用过负前瞻匹配;看起来很有趣。感谢您的帮助。 -
停止匹配,将字符串分成部分标题
标签: python regex parsing text split