![](/img/trans.png)
[英]Python regex to find all case of curly brackets, inclusive of brackets
[英]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.