У меня проблемы с регулярным выражением для извлечения определенной информации из файла данных

Данные, с которыми я работаю, имеют следующий формат:

1880    20  David   7570    Mabel   13096

Мне нужно указать год (1880), ранг (20) и только имя (Дэвид или Мейбл). Конечным результатом является:

1880        20      David

или

1880        20      Mabel

Мне удалось раздельно выделить год, звание и имя, но у меня есть проблемы, связанные с составлением целого регулярного выражения. Я знаю основы регулярных выражений, но в настоящее время я не могу получить доступ к своим заметкам.

Я пытаюсь использовать egrep.

1
задан 19 February 2014 в 21:21

3 ответа

Я бы порекомендовал решение Python (я не знаю, что вы используете в настоящее время):

import re

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

Относительно grep

Я не уверен, что grep может использоваться в этом случае. Ему не хватает возможности печатать определенные пронумерованные группы, а это то, что вам нужно (я считаю). Мне было бы интересно узнать, есть ли у вашего профессора (или кого-либо еще) решение с чистым grep.

Это регулярное выражение должно работать, но вам нужно извлечь нужные поля из пронумерованных групп (продемонстрировано на примере Python):

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

grep просто не правильный инструмент. Regex есть, но в другой реализации (привет, Python!).

) 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!).

0
ответ дан 19 February 2014 в 21:21
grep -Po '\d+\s+\d+\s+\w+' file.txt
0
ответ дан 19 February 2014 в 21:21

Это было невозможно (по крайней мере из моей области видимости) только с использованием grep. Через несколько дней мой профессор сообщил мне, что он хочет, чтобы мы использовали комбинацию команд для достижения желаемого результата. Тем не менее, все ответы были действительными и работали, когда я попробовал их. Это подразумевается как прямой ответ на этот вопрос, основанный на знаниях начинающих (кто-то из моего нынешнего опыта работы с Ubuntu).

0
ответ дан 19 February 2014 в 21:21

Другие вопросы по тегам:

Похожие вопросы: