gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:48:42 26 4
gpt4 key购买 nike

您好,我在正则表达式方面遇到了一些困难。我有一个 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

但这并不能满足我的所有需求,它返回了一些但不是全部值。

最后我想要大括号内的数字作为字典(例如:Key:238.85,Value:0.943)所以我可以在之后绘制它。

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

最佳答案

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

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 demo

阻止匹配正则表达式

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

数字提取正则表达式

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

关于Python正则表达式在某个字符串之后找到大括号内的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58518692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com