python - 正则表达式或分割 (' ' )?

标签 python regex split

我完全不知道如何正确构造正则表达式来对该文件执行我想要的操作。

https://www.dropbox.com/s/9zadqzbvcg6ogtf/000218.txt?dl=0

AppearanceDate 29.08.2015
AppearanceTime 00:02:18
FrameCount 17
#   time  bright   x      y      alpha     delta   c_x    c_y    c_alpha  c_delta  use
01  18.175 ----  0.052  0.838   19.3755   21.947  -----  -----  --------  -------  no
02  18.215 ----  0.053  0.834   19.3682   21.985  -----  -----  --------  -------  no
03  18.255 ----  0.055  0.830   19.3608   22.024  -----  -----  --------  -------  no
04  18.295  5.1  0.057  0.826   19.3535   22.063  -----  -----   19.3541   22.070  yes
05  18.335  0.4  0.058  0.821   19.3462   22.101  -----  -----   19.3452   22.105  yes
06  18.375  0.3  0.060  0.815   19.3354   22.137  -----  -----   19.3365   22.140  yes
07  18.415  0.3  0.061  0.811   19.3281   22.172  -----  -----   19.3278   22.174  yes
08  18.455  0.2  0.063  0.806   19.3193   22.210  -----  -----   19.3192   22.208  yes
09  18.495  0.2  0.064  0.801   19.3110   22.236  -----  -----   19.3107   22.241  yes
10  18.535  0.2  0.066  0.795   19.3018   22.286  -----  -----   19.3023   22.274  yes
11  18.575  0.1  0.068  0.791   19.2935   22.312  -----  -----   19.2939   22.306  yes
12  18.615 ----  0.069  0.786   19.2861   22.335  -----  -----  --------  -------  no
13  18.655 -0.1  0.070  0.782   19.2788   22.359  -----  -----   19.2776   22.369  yes
14  18.695 -0.1  0.071  0.776   19.2686   22.391  -----  -----   19.2695   22.400  yes
15  18.735 ----  0.073  0.770   19.2583   22.424  -----  -----  --------  -------  no
16  18.775 ----  0.074  0.764   19.2480   22.456  -----  -----  --------  -------  no
17  18.815 ----  0.076  0.758   19.2383   22.488  -----  -----  --------  -------  no

我想匹配 AppearanceTime 中的 HH:MM:SS 和“时间”列下的 SS.sss。

目前我几乎可以通过两步完成 - 首先对于 AppearanceTime 我可以使用:

r"(\d{2}:\d{2}:\d{2})"

据我所知 SS.sss 值是:

r"(\d{2}[.]\d{3})"

但这也匹配 AppearanceDate、alpha、delta、c_alpha 和 c_delta 中的部分值。

最后,以防万一,我一直在这里进行测试:打开了全局和多行标志的https://regex101.com/

如果有人能帮助我解决这个问题,我将不胜感激。似乎有很多很好的资源可以帮助创建正则表达式,但我完全没有得到它!

我的另一个想法是,我可能可以非常有效地使用 split(' ') 来处理 SS.sss,但我想问是否有人知道正则表达式或 split 哪个更有效高效,因为这将应用于数千个文件,如上面给出的文件。

非常感谢!

最佳答案

您可以使用

(?:AppearanceTime\s+|^\d+\s+)(\d{2}:\d{2}:\d{2}|\d{2}\.\d{3})

请参阅regex demo (将 re.M 标志与 re.findall 一起使用)。

详细信息:

  • (?:AppearanceTime\s+|^\d+\s+) - 这匹配 2 个选项
    • AppearanceTime\s+ -AppearanceTime字符串和 1 个以上空格 ( \s+ )
    • | - 或
    • ^\d+\s+ - 行首 ( ^ )、1+ 数字 ( \d+ ) 和 1+ 空格
  • (\d{2}:\d{2}:\d{2}|\d{2}\.\d{3}) - 匹配并捕获( re.findall 的最终输出)以下 2 个选项之一:
    • \d{2}:\d{2}:\d{2} - 3 : -分隔的 2 位数字 block
    • | - 或
    • \d{2}\.\d{3} - 2 位数字,. , 3位子串

请参阅Python demo :

import re
rx = r"(?:AppearanceTime\s+|^\d+\s+)(\d{2}:\d{2}:\d{2}|\d{2}\.\d{3})"
s = <<YOUR STRING HERE>>
res = re.findall(rx, s, flags=re.MULTILINE)
print(res)

关于python - 正则表达式或分割 (' ' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41162157/

相关文章:

javascript - Java 与 JavaScript 拆分行为

python - 如何在 Scikit 中计算多类分类的混淆矩阵?

python - 传递值的形状是 (2, 3),索引表示 (2, 1)

python - 如何在 Python 3 中从字节缓冲区构造内存中的 TarFile 对象?

php - 第 222 行警告 : preg_match(): Compilation failed: quantifier does not follow a repeatable item at offset 1 in wp-includes/class-wp. php

java - 基于正则表达式拆分字符串但保留分隔符

linux - 使用linux基于csv将文件拆分为可变数量和目录

python - SQLite3 序列类型没有增加

php - 用于解析YouTube嵌入式代码的正则表达式

c++ - 如何使用 vim 将文字 "\n"替换为文字 "\\n"?