繁体   English   中英

Python 正则表达式在某个字符串之后找到大括号内的所有内容

[英]Python regex find everything inside curly brackets after a certain string

嗨,所以我正在努力使用正则表达式。 我有一个 rpt 文件,我需要从中获取特定数据。 文件看起来有点像这样:

lots of text...
[MS]
{
;Mass   % BPI
238.85  0.943
247.64  0.984
378.65  0.990
...
}
lots of text...

在此字符串发生后,我想将所有内容都放在大括号内:[MS]。 问题是这个文件中有更多的大括号,它们不仅围绕着我需要的数据。

我已经尝试过的是:

import re

file = input("Enter file path: ")
if len(file) < 1:
    file = "path"
handle = open(file)

pattern = r'^([-0-9\.eE+]+)[ \t]*(;|,)?[ \t]*([-0-9\.eE+]*)$'
findings = re.findall(pattern, handle)

print(findings)

#and then making a single dict out of it with key-value pairs

但这并没有给我我所需要的一切,它返回了一些价值,但不是全部。

最后,我希望将大括号内的数字作为字典(例如:键:238.85,值:0.943),以便之后我可以 plot 它。

注意:质量和 BPI“列”之间的空格是制表符。

进行多阶段提取过程。 第一阶段是一个正则表达式,它在 MS 之后提取括号之间的内容:

re.search(r"\[MS\]\s*{([^}]+)}", s).group(0)

从那里您可以逐行解析数据。

您可以在[MS]之后提取{}之间的所有块,然后从块中提取所有必要的数据:

import re
results = []

with open(path_to_file, 'r') as r:
    for block in re.findall(r'\[MS\]\s*{([^{}]+)}', r.read()):
        results.extend(re.findall(r'^(\d[\d.]*)\t(\d[\d.]*)$', block, re.M))

print(dict(results))

请参阅Python 演示

块匹配正则表达式

  • \[MS\] - 文字[MS]文本
  • \s* - 0+ 个空格
  • { - 一个{字符
  • ([^{}]+) - 第 1 组(这是re.findall将返回的内容):除{}之外的任何 1+ 个字符
  • } - 一个}字符。

数字提取正则表达式

  • ^ - 行首(由于re.M
  • (\d[\d.]*) - 第 1 组(键):一个数字,然后是任何 0+ 数字或点
  • \t - 一个制表符
  • (\d[\d.]*) - 第 2 组(值):一个数字,然后是任何 0+ 数字或点
  • $ - 行尾(由于re.M )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM