2012-12-12 14 views
10

मैं गैर-लालची से टीडी टैग को पार्स करने का प्रयास कर रहा हूं।रेगेक्स गैर-लालची

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

मैं नीचे का उपयोग कर रहा मेरी regex के रूप में: मैं कुछ इस तरह के साथ शुरू कर रहा हूँ

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

रिकॉर्ड के रूप में नीचे लौट:

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

क्यों यह नहीं है विभाजन जो पहले पूर्ण परिणाम ("सामान" से शुरू होता है)? पैरामीटर के साथ या बिना टीडी टैग के सभी उदाहरणों पर विभाजित करने के लिए मैं रेगेक्स को कैसे समायोजित कर सकता हूं?

+0

कृपया देखें http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags –

+1

'.' सिर्फ चरित्र वर्ग '[।]', 'किसी भी चरित्र' में एक शाब्दिक बिंदु का मतलब है। आप _may_ को '[^>] * 'के साथ और अधिक सफलता मिली है, _but_ यह एक विशेषता में'> 'पर टूट जाएगा (जो कारणों में से एक है कि हम अक्सर पार्सर्स को क्यों देखते हैं बल्कि HTML और xml में हेरफेर करने के लिए regexes)। – Wrikken

+0

@Wrikken यहां HTML बहुत स्थिर है। इसमें बहुत भिन्नता नहीं है और मुझे रेगेक्स पता है जो इसके लिए काम करेगा। मैं इसके कारण पार्सर्स का मार्ग नहीं गया था। क्या बनाने का कोई तरीका है। चरित्र का अर्थ है 'किसी भी चरित्र' जिसमें व्हाइटस्पेस शामिल है? – steventnorris

उत्तर

13

regex आप चाहते हैं <TD[^>]*> है:

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

नोट: . कुछ भी (सफेद स्थान को भी शामिल है) से मेल खाता है तो [.\s]*? निरर्थक और गलत है के रूप में [.] से मेल खाता है एक शाब्दिक . तो .*? का उपयोग करें।

+1

डिफ़ॉल्ट रूप से,। नई लाइन से मेल नहीं खाता है लेकिन \ s करता है। –

+0

वाह, यह शानदार है ... – Hambone

20

गैर लालची मैच के लिए, कोशिश इस <TD.*?>

+0

यह काम करता है, फिर भी मैं अभी भी अपने सिर को लपेट नहीं सकता हूं क्यों ... – Hambone

+3

@ हैम्बोन क्योंकि 'क्वांटिफ़ायर' के बाद '' 'रेगिक्स इंजन को बताते समय प्रतीकों को खाने से रोकने के लिए कहते हैं अभिव्यक्ति का पहला मिलान जो '?' का पालन करता है, वह है- '>'। अंतर लालची बनाम गैर लालची '*' के कारण है। – JustAMartin