我有一个包含许多行的文件,我想从中提取数据。结构与此类似
Detected 3 gas in sample. Composition :\r\n Very low Helium (1.5% total)\r\n Medium Oxygen (20% total)\r\n Low Nitrogen (6.5% total)\r\n
Detected 0 gas in sample. Composition :\r\n
Detected 2 gas in sample. Composition :\r\n Low Carbon monoxide (5% total)\r\n Very high Helium (80% total)\r\n Traces of Oxygen\r\n
Detected 1 gas in sample. Composition :\r\n Medium Nitrogen (18.5% total)\r\n Traces of Helium, Argon\r\n
我想使用正则表达式提取数据,以获得类似于此的数据数组(理想情况下是数据帧)
第一列是dataframe固有的。第二个可以从每行的第一句话中提取,也可以通过考虑已知成分百分比的气体数量轻松获得(因此可以忽略第一句话)。 我给出的示例总结了所有不同的线条结构:
\r\n
此外,打开文件时,无法预先知道所有可能检测到的气体的列表,即,必须根据文件中的数据构建列。
我真的开始学习正则表达式,这可能是一个有点雄心勃勃的开始。
我试图在正则表达式中翻译类似“匹配所有序列,从大写开始,后跟任意数量的小写字符或介于(
和% total)
之间的序列”,这通常会给我(忽略每行的第一句话)类似['Very low','Helium','1.5','Medium','Oxygen','20',...]
的内容。但我真的很难把它翻译成regex,即使在regex101.com的帮助下,我也不确定事情是如何运作的
我真的很高兴能得到一些帮助和解释为什么你的解决方案有效
使用无气体/观测文本静态列表的正则表达式的方法
输出
这是一个非正则表达式的解决方案(但它依赖于字符串中的换行符保存为文件中的字符串,请参见Armanli的注释)。不需要正则表达式,因为字符串具有类似的结构。此解决方案循环文件中的行,在
\\r\\n
上拆分,并从列表中提取Detected
、Traces
或任何气体。它将值保存在可加载到熊猫中的DICT列表中:输出:
相关问题 更多 >
编程相关推荐