2012-12-12 15 views
10

Grefti olmayan TD etiketlerini ayrıştırmaya çalışıyorum.Regex Açgözlü Olmayan

Regex.Split(tempS, @"\<TD[.\s]*?\>"); 

kayıtları şöyle dönmek: Neden

"" 
"stuff<TD align="right">More stuff<TD align="right>Other stuff" 
"things" 
"more things" 

değil benim regex olarak aşağıda kullanıyorum

<TD>stuff<TD align="right">More stuff<TD align="right>Other stuff<TD>things<TD>more things 

: Böyle bir şey ile başlıyorum ilk tam sonucu bölme ("şeyler" ile başlayan)? TD etiketinin tüm örneklerinde parametrelerle veya parametresiz olarak bölünmesi için düzenli ifadeyi nasıl ayarlayabilirim?

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

+1

'bakınız deneyin .' sadece karakter sınıfında '[.] ', herhangi bir karakterde bir harf noktasını belirtir. Siz [*>] * 'ile daha fazla başarı elde edersiniz, _but_, bir öznitelikte bir'> 'kırılırdı (ki bu genellikle html ve xml'yi işlemek için kullanılan normal ifadelerden ziyade ayrıştırıcılara bakmamızın nedenlerinden biridir). – Wrikken

+0

@Wrikken HTML burada oldukça statik. Çok fazla varyasyon yok ve bunun için çalışacak olan ifadeyi biliyorum. Bundan dolayı ayrıştırıcıların rotasına gitmedim. Yapmanın bir yolu var mı? karakter, boşluk dahil olmak üzere 'herhangi bir karakter' anlamına geliyor? – steventnorris

cevap

13

istediğiniz regex <TD[^>]*> geçerli:

<  # Match opening tag 
TD # Followed by TD 
[^>]* # Followed by anything not a > (zero or more) 
>  # Closing tag 

Not: . (boşluklar dahil) her şeye uyar [.] bir hazır . yüzden .*? kullanmak maçları şekilde [.\s]*? gereksiz ve yanlıştır.

+1

Varsayılan olarak,. yeni çizgiyle eşleşmiyor ama yapmıyor. –

+0

Wow, bu harika ... – Hambone

20

olmayan açgözlü maç için bu <TD.*?>

+0

Bu işe yarıyor ama yine de kafamın etrafına neden sarılmam ki ... – Hambone

+3

@Hambone Çünkü '?' Nicelleştiriciden sonra '' 'Regex motorunun bulduğunda sembolleri yememesini söyler ifadesinin ilk eşleştirmesi '' ', yani' ''. Fark, açgözlü ve açgözlü olmayan '' 'yüzünden. – JustAMartin