尝试使用正则表达式从 txt 文件中提取三个数据列表
文件结构=元数据、值(重复)
#
#text
#text
#
9.2318434E-5 -1.3870514E-9 1.0E-4 7.0E-5 9.2318434E-5 9.225606E-5 9.225606E-5 2.5E-4 2.5E-4
9.230842E-5 -1.3756367E-9 1.0E-4 7.0E-5 9.230842E-5 9.225539E-5 9.225539E-5 0.00225 0.00225
9.230592E-5 -1.3935526E-9 1.0E-4 7.0E-5 9.230592E-5 9.2255046E-5 9.2255046E-5 0.00275 0.00275
#
#text
#text
#
9.2318434E-5 -1.3870514E-9 1.0E-4 7.0E-5 9.2318434E-5 9.225606E-5 9.225606E-5 2.5E-4 2.5E-4
9.231593E-5 -1.3816212E-9 1.0E-4 7.0E-5 9.231593E-5 9.225253E-5 9.225253E-5 7.5E-4 7.5E-4
9.230592E-5 -1.3935526E-9 1.0E-4 7.0E-5 9.230592E-5 9.2255046E-5 9.2255046E-5 0.00275 0.00275
#
#text
#text
#
9.2318434E-5 -1.3870514E-9 1.0E-4 7.0E-5 9.2318434E-5 9.225606E-5 9.225606E-5 2.5E-4 2.5E-4
9.231593E-5 -1.3816212E-9 1.0E-4 7.0E-5 9.231593E-5 9.225253E-5 9.225253E-5 7.5E-4 7.5E-4
9.231343E-5 -1.3962527E-9 1.0E-4 7.0E-5 9.231343E-5 9.225581E-5 9.225581E-5 0.00125 0.00125
我一直在尝试以下方法
with open(file) as newfile:
data = re.findall(r'^([#][\n][0-9])[\s\S]*([\n][\n])$', newfile.read())
每个数据 block 都以 #\n[0-9] 开头,以\n\n 结尾,然后我需要获取开头和结尾之间的每个字符,因此 [\s\S]*。似乎没有任何帮助会很好。
最佳答案
附注,您不需要将所有内容都包含在 []
中.
查看正在使用的正则表达式here .
^(?<=#\n)\d[^#]*$
-
^
在行的开头断言位置 -
(?<=#\n)
正向回顾确保前面的内容匹配#
后跟换行符\n
-
\d
匹配数字 -
[^#]*
匹配除#
之外的任何字符任意次数(贪婪,因此它将尝试匹配尽可能多的字符 - 直到到达另一个#
) -
$
在行尾断言位置
或者,非常简单,您可以使用 ^\d.*
如图所示here .
-
^
在行的开头断言位置 -
\d
匹配数字 -
.*
匹配任意字符(行终止符除外)任意次数
关于python - 使用正则表达式从文本文件中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55499468/