Как написать это в различных вкусах регулярных выражений - PullRequest
1 голос
/ 13 апреля 2010

У меня есть следующие данные:

a b c d FROM:<uniquepattern1>
e f g h TO:<uniquepattern2>
i j k l FROM:<uniquepattern1>
m n o p TO:<uniquepattern3>
q r s t FROM:<uniquepattern4>
u v w x TO:<uniquepattern5>

Я бы хотел запрос регулярного выражения, который может найти содержимое TO: при обнаружении FROM:<uniquepattern1>, поэтому результаты будут uniquepattern2 и uniquepattern3.

Я безнадежен с regex, я был бы признателен за любые указания о том, как написать это (параметры просмотра?) И любые различия между regex на разных платформах (например, C # .NET Regex против Grep против Perl), которые могут быть здесь уместны

Спасибо.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2010

Попробуйте:

/FROM:<uniquepattern1>.*\r?\n.*?TO:<(.*?)>/

Это работает, сначала находя привязку ОТ, а затем используйте подстановочный знак точки. Точечный оператор не соответствует новой строке, поэтому она будет занимать оставшуюся часть строки. Подстановочный знак без жадных точек затем использует до следующего TO и фиксирует то, что находится между угловыми скобками.

1 голос
/ 13 апреля 2010

Ваше требование для разбора файла просто. нет необходимости использовать регулярные выражения. Откройте файл для чтения, пройдите проверку каждой строки на FROM:<uniquepattern1>, найдите следующую строку и распечатайте их. Кроме того, ваши TO строки разделены только ":". поэтому вы можете использовать это как разделитель полей.

например, с awk

$ awk -F":" '/FROM:<uniquepattern1>/{getline;print $2}' file
<uniquepattern2>
<uniquepattern3>

то же самое относится и к другим языкам / инструментам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...