2012-09-04 21 views
5

Nasıl bir bakış açısına bakarsın?
Bu durumda lookbehind'i kullanmak istiyorum: eğer varsa. .NET Regex Lookbehind Açgözlü Değil

m = Regex.Match("From: John", @"(?i)(?<=from:)...."); 
// returns ' Jon' what I expect not a problem just an example 

m = Regex.Match("From: John", @"(?i)(?<=from:?)...."); 
// returns ': Jo' 
// I want it to return ' Jon' 

Ben sürece sonra bazı olumlu koymak olarak
@"(?i)(?<=\bsubject:?\s+).*?(?=\s*\r?$)" 

etrafında bir iş bulmuş? sonra isteğe bağlı açgözlü oyun dışı alır. Aynı sebepten ötürü $ 'ı ileriye atmak zorunda kaldım.
Ancak, isteğe bağlı bir açgözlülüğe son vermeniz gerekiyorsa, aşağıdaki kabul edilen yanıtla gitmek zorundasınız.

cevap

4

İlginç, .NET'te açgözlü olmadıklarını farketmedim.

(?<=from(:|(?!:))) 

Bunun anlamı şudur:: İşte bir çözümdür

(
    :  # match a ':' 
    | 
    (?!:) # otherwise match nothing (only if the next character isn't a ':') 
) 

Bu maç için bunu zorlar ':' eğer varsa.

+0

Biraz ayrıntılı ama işe yarıyor ve bu benim için çalışıyor. Teşekkürler. Ben bu bakıcıların açgözlü bir böcek olduğunu düşünüyorum. – Paparazzi

+0

@Blam: Bunun daha az ayrıntılı olması için basitleştirilebileceğini anladı. Gönderiyi güncelledim. – porges

+0

Hayır derleyici başarısız olursa lütfen düzeltin veya özgün cevaba geri dönün rSubject = new Regex (@ "(? I) (? <= Subject (: | (?!:))) ........)"); – Paparazzi