2008-09-15 21 views
5

Boş bir satırdan sonra oluşacak eşleşecek çok satırlı bir regex arıyorum. Örneğin, aşağıda örnek bir e-posta verildiğinde "Kimden: Alex" ile eşleşmek istiyorum. ^From:\s*(.*)$ herhangi bir Kimden eşleşecek şekilde çalışır, ancak gövdedeki satırlarla sınırlı olmasını istiyorum (ilk boş satırdan sonraki herhangi bir şey).Çok satırlı C# Boş satırdan sonra eşleşecek Regex

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

fyi 

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

Party! 

cevap

2

C# normal ifadelerinin sözdiziminden emin değilim, ancak dizenin başlangıcına demirlemenin bir yolu olmalıdır (^ gibi satırın başına değil). yapmak, çalışır ancak, üzerinde çok satırlı eşleme seçeneğini açmak emin olun

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

: Benim örnekte olduğu "\ A" diyeceğiz "" eşleşme \ n

+0

Teşekkürler. İhtiyacım olan şey, Singleline modunu da açmak ve kullanmaktı. yerine .*. – user10392

0

Bu tür işler için karmaşık düzenli ifadeler yazmak kötü bir fikir IMO'dur. Birkaç basit soruyu birleştirmek daha iyidir. Örneğin, ilk önce vücudun başlangıcını bulmak için "\ r \ n \ r \ n" ifadesini arayın ve ardından basit normal ifadeyi gövde üzerinde çalıştırın.

0

Bu, geriye dönük bir değerlendirme kullanmaktadır. Grup 1 size "Gönderen" satırını verecektir ve grup 2 size gerçek değeri (örneğinizde "Alex") verecektir. Gönderen İlk anlam

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

\s{2,} maçlar en az iki boş karakterleri: James girmeyecektir. O zaman sadece bir sonraki "Kimden:" i arıyor ve oradan ele geçirmeye başlıyor.

Bunu, RegexOptions.SingleLine ve RegexOptions.ExplicitCapture ile kullanın; bu, dış grubun vurulmayacağı anlamına gelir.

İlgili konular