gpt4 book ai didi

Python正则表达式分割参数化文本文件

转载 作者:行者123 更新时间:2023-11-30 22:16:11 25 4
gpt4 key购买 nike

我正在尝试重复拆分包含“string = float”格式的文件。下面是该文件的样子。

+name1 = 32    name2= 4
+name3 = 2 name4 = 5
+name5 = 2e+23
...

我希望他们把它放进一本字典。就像...

a={name1:32, name2:4, name3:2, name4:5, name5:2e+23}

我是正则表达式新手,很难弄清楚该怎么做。经过一番谷歌搜索后,我尝试执行以下操作来删除“+”字符和空格..

p=re.compile('[^+\s]+')
splitted_list=p.findall(lineof_file)

但这给我带来了两个问题..1.当名称和“=”符号之间没有空格时,它不会 split 。2. 对于像 2e+23 这样的数字,它将中间的+号分开。

在对 depperm 的代码进行一些修改后,我成功地按照我想要的方式解析了该文件。
但我面临另一个问题。为了更好地解释我的问题。下面是我的文件的样子。+ 号后可以出现多个参数和值对,并带有“=”号。参数名称可以在任意位置包含字母和数字。值还可以包含带科学通知的 +- 号 (E/e-+)。有时,如果值是单引号的话,它可以是一个数学表达式。

+ abc2dfg3  = -2.3534E-03    dfe4c3= 2.000
+ abcdefg= '1.00232e-1*x' * bdfd=1e-3

我设法使用下面的正则表达式解析上面的内容。

re.findall("(\w+)\s*=\s*([+-]?[\d+.Ee+-]+|'[^']+')",eachline)

但是现在我的问题有时就像“* bdfd=1e-3”,可能会有一些评论。我的文件中 *(星号) 之后的任何内容都应被视为注释,但如果 * 出现在单引号字符串内,则不应被视为注释。使用上面的正则表达式,它也解析“bdfd=1e-3”,但我希望不解析它。我尝试了几个小时寻找解决方案,但到目前为止我找不到任何解决方案。

最佳答案

我建议只获取名称和值,而不用担心空格或不需要的字符。我会使用这个正则表达式: (name\d+)\s?=\s?([\de+]+) 它将获取名称,然后您还可以对数字进行分组,即使它有一个e 或空格。

import re
p=re.compile('(name\d+)\s*=\s*([\de+]+)')

a ={}
with open("file.txt", "r") as ins:
for line in ins:
splitted_list=p.findall(line)
#splitted_list looks like: [('name1', '32'), ('name2', '4')]
for group in splitted_list:
a[group[0]]=group[1]
print(a)
#{'name1': '32', 'name2': '4', 'name3': '2', 'name4': '5', 'name5': '2e+23'}

关于Python正则表达式分割参数化文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50046647/

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