【发布时间】:2018-04-26 15:19:00
【问题描述】:
我正在尝试重复拆分包含“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.当没有空格btw名称和“=”符号时,它不会分裂。 2. 对于像 2e+23 这样的数字,它将 + 号分开。
在对 depperm 的代码进行一些修改后,我设法解析了文件。
但我面临另一个问题。
为了更好地解释我的问题。下面是我的文件的样子。
+ 号后可以出现多个参数和值对,并带有 '=' 号。
参数名称可以在任意位置包含字母和数字。值也可以包含带有科学通知的 +- 符号(E/e-+)。有时 value 可以是一个数学表达式,如果它是单引号的。
+ 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”,可能会有一些评论。我的文件中 *(asterisk) 之后的任何内容都应视为注释,但如果 * 存在于单引号字符串中,则不应视为注释。 使用上面的正则表达式,它也解析“bdfd=1e-3”,但我希望它不被解析。 我试图找到解决方案几个小时,但到目前为止我找不到任何解决方案。
【问题讨论】:
标签: python regex python-2.7