2008-09-15 2 views
5

Я ищу многострочное регулярное выражение, которое будет соответствовать вхождениям после пустой строки. Например, учитывая приведенный ниже пример электронной почты, я хотел бы сопоставить «From: Alex». ^From:\s*(.*)$ работает в соответствии с любой из строки, но я хочу, чтобы она была ограничена линиями в теле (что-то после первой пустой строки).Многострочное C# Regex для соответствия после пустой строки

 
Received: from a server 
Date: today 
To: Ted 
From: James 
Subject: [fwd: hi] 

fyi 

----- Forwarded Message ----- 
To: James 
From: Alex 
Subject: hi 

Party! 

ответ

2

Я не уверен в синтаксисе регулярных выражений C#, но у вас должен быть способ привязки к началу строки (а не к началу строки, такой как ^). Я буду называть это «\ A» в моем примере:

\A.*?\r?\n\r?\n.*?^From:\s*([^\r\n]+)$ 

Убедитесь, что вы включите опцию согласования многострочного на, однако, что работает, чтобы сделать «» match \ n

+0

Спасибо. То, что мне было нужно, это включить режим Singleline и использовать. *? вместо .*. – user10392 2008-09-15 23:22:23

0

Написание сложных регулярных выражений для таких заданий - это плохая идея ИМО. Лучше объединить несколько простых запросов. Например, сначала найдите «\ r \ n \ r \ n», чтобы найти начало тела, затем запустите простое регулярное выражение над телом.

0

Это утверждение выглядит следующим образом. Группа 1 предоставит вам строку «От», а группа 2 предоставит вам фактическое значение («Алекс» в вашем примере).

(?<=\n\n).*(From:\s*(.*?))$ 
0
\s{2,}.+?(.+?From:\s(?<Sender>.+?)\s)+? 

В \s{2,} матчи по крайней мере, два пробельных символов, что означает ваш первый От: Джеймс не пострадали. Тогда это просто вопрос поиска следующего «От:» и начала съемки оттуда.

Используйте это с RegexOptions.SingleLine и RegexOptions.ExplicitCapture, это означает, что внешняя группа не ударит.

Смежные вопросы