我很难使用正则表达式从数据文件中提取某些信息

我很难使用正则表达式从数据文件中提取某些信息

我正在处理的数据具有以下格式:

1880    20  David   7570    Mabel   13096

我只需要提取年份 (1880)、排名 (20) 和姓名 (David 或 Mabel)。最终结果是:

1880        20      David

或者

1880        20      Mabel

我已经成功地分别提取了年份、排名和姓名,但我无法将整个正则表达式组合在一起。我知道正则表达式的基础知识,但目前无法访问我的笔记。

我正在尝试使用 egrep。

答案1

grep -Po '\d+\s+\d+\s+\w+' file.txt

答案2

我推荐一个 Python 解决方案(我不知道您当前正在使用什么):

import re

re_find_data = re.compile(r'^(\d+)\s+(\d+)\s+(\S+)\s+(\d+)\s+(\S+)\s+(\d+)$')

for line in open(r'/path/to/file'):
    for match in re_find_date.findall(line):
        print(match)
        # Do something with 'match'

        # You can index the 'match' tuple like so:
        print(match[2])
        # Print 3rd part (name)

关于grep

我不确定 grep 是否可以用于这种情况。它缺乏打印特定编号组的能力,而这正是您所需要的(我相信)。我很想知道您的教授(或其他人)是否有纯 grep 的解决方案。

这个正则表达式应该可以工作,但是您需要从编号组中提取所需的字段(在 Python 示例中演示):

(\d+)\s+(\d+)\s+(\S+)\s+(\d+)\s+(\S+)\s+(\d+)

grep 并不是合适的工具。Regex 才是,但是采用不同的实现(你好,Python!)。

答案3

仅使用 grep 是不可能做到这一点的(至少从我上课的情况来看)。几天后,我的教授告诉我,他希望我们使用命令组合来实现所需的结果。但是,当我尝试这些答案时,它们都是有效的。这只是基于非常初级的知识(与我目前的 Ubuntu 经验相当)对这个问题的直接回答。

相关内容