2010-10-19 16 views
24

क्या सी # रेगेक्स में अवधि और अंडरस्कोर को छोड़कर सभी विराम चिह्नों का मिलान करने का कोई आसान तरीका है? प्रत्येक विराम चिह्न चिह्न की गणना किए बिना ऐसा करने की उम्मीद है।रेगेक्स: छोड़कर किसी भी विराम चिह्न को मेल करें। और _

उत्तर

29

उपयोग Regex घटाव

[\p{P}-[._]] 

यहाँ नेट Regex प्रलेखन (मुझे यकीन है कि अगर अन्य जायके इसका समर्थन नहीं कर रहा हूँ) के लिए लिंक ... http://msdn.microsoft.com/en-us/library/ms994330.aspx

यहाँ एक सी # उदाहरण

string pattern = @"[\p{P}\p{S}-[._]]"; // added \p{S} to get ^,~ and ` (among others) 
string test = @"_""'a:;%^&*~`[email protected]#.,?"; 
MatchCollection mx = Regex.Matches(test, pattern); 
foreach (Match m in mx) 
{ 
    Console.WriteLine("{0}: {1} {2}", m.Value, m.Index, m.Length); 
} 

स्पष्टीकरण पैटर्न एक चरित्र वर्ग घटाव है। यह एक मानक चरित्र वर्ग के साथ शुरू होता है जैसे कि [\ p {पी}] और उसके बाद एक घटाव वर्ण वर्ग जोड़ता है - [._] जो कि निकालने के लिए कहता है। तथा _। मानक कक्षा के बाद [] के अंदर घटाव [] के अंदर रखा गया है।

+0

यह ^, ~ या 'से मेल नहीं खा रहा था; क्या मैं इसे गलत तरीके से जांच रहा हूं, या करता है .NET उन्हें विराम चिह्न नहीं मानता? – Smashery

+0

यदि आप - [._] ड्रॉप करते हैं, तो \ p {P} उनसे मेल नहीं खाता है। – Les

+0

तो .NET उन्हें विराम चिह्न नहीं मानता है? – Smashery

1

आप संभवतः इस तरह एक नकार चरित्र वर्ग इस्तेमाल कर सकते हैं:

[^0-9A-Za-z._\s] 

यह सूचीबद्ध उन को छोड़कर हर चरित्र भी शामिल है। आपकी अंतिम आवश्यकताओं के आधार पर आपको अधिक वर्ण (जैसे नियंत्रण वर्ण) को बाहर करने की आवश्यकता हो सकती है।

+0

कि रिक्त स्थान भी –

+0

ठीक मिलेगा, अपवर्जन सूची में जगह जोड़। –

+4

ठीक है, लेकिन मैं इस प्रश्न के लिए अपने प्रतिनिधि के आधे चाहते हैं ... –

8

यहाँ एक छोटे से सरल कुछ है। शब्द या श्वेत-स्थान नहीं (जहां शब्दों में ए-ज़ा-जे 0-9 और अंडरस्कोर शामिल हैं)।

[^\w\s.] 
+0

रूबी में भी काम करता है! – zanbri

12

उत्तर अब तक सभी विराम चिह्नों का सम्मान नहीं करते हैं। यह काम करना चाहिए:

(?![\._])\p{P} 

(स्पष्टीकरण: नकारात्मक अग्रदर्शी सुनिश्चित करने के लिए है कि न तो . है और न ही _ मिलान किया जाता है, तो किसी भी यूनिकोड विराम वर्ण से मेल खाते हैं।)

+0

यह ^, ~ या 'से मेल नहीं खा रहा था; क्या मैं इसे गलत तरीके से जांच रहा हूं, या करता है .NET उन्हें विराम चिह्न नहीं मानता? – Smashery

+0

@Smashery ये उच्चारण हैं, आप कभी भी अंग्रेजी भाषा में विराम चिह्न के रूप में उनका उपयोग नहीं करेंगे। – steinar

+0

बहुत बहुत धन्यवाद! मैंने लेस के जवाब को स्वीकार करने का फैसला किया, क्योंकि मुझे लगता है कि रेगेक्स घटाव अवधारणा को समझना आसान है; इस प्रकार मुझे इसे याद रखने की अधिक संभावना है; लेकिन +1 - मुझे कुछ नई चीजें सिखाने के लिए धन्यवाद!(इच्छा है कि मैं दो उत्तरों स्वीकार कर सकता हूं) – Smashery

संबंधित मुद्दे