python - 使用正则表达式从文本文件中提取数据

标签 python regex

尝试使用正则表达式从 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/

相关文章:

regex - R - 具有特定排除的 grepl

带有后缀的简单键值对的 Java 正则表达式

php - 正则表达式匹配电报用户名并在 PHP 中删除整行

c# - 提取 "Home"之后的 URL 部分

python - 使用 Python Mock 库监视内部方法调用

Python:在多个列表中查找相同的项目

python - Pyplot 3d 散点图 : points at the back overlap points at the front

java - Pattern.asPredicate 中的错误?

python - 编码风格 (PEP8) - 模块级别 "dunders"

python - 字典不会以字符串作为键更新