2011-09-06 23 views
22

मेरे पास एक स्ट्रिंग है और कहा स्ट्रिंग से अक्षरों की आवश्यकता है।सी # में स्ट्रिंग से केवल अक्षरों को कैसे प्राप्त करें?

string s = "EMA123_33"; // I need "EMA" 
string s = "EMADRR123_33"; // I need "EMADRR" 

मैं दृश्य स्टूडियो में सी # का उपयोग कर रहा 2008

+1

अगर मैं पूछ सकता हूं तो डाउनवॉट्स और क्लोज-वोट क्यों? ठीक है सवाल "अच्छा अंग्रेजी" नहीं है, लेकिन मुझे लगता है कि अर्थ नमूने पर आधारित अस्पष्ट नहीं है – Carsten

+1

मतदान क्यों करें? हाँ, उन्होंने "वर्णमाला" कहा जब उनका मतलब "अक्षर" था, लेकिन यह अन्यथा एक पूरी तरह से वैध सवाल है। –

+4

»वर्णमाला« मतलब »पत्र« इंडिक उत्पत्ति के लोगों द्वारा बनाई गई एक आम गलती है। बस इस तथ्य के लिए उपयोग करें कि एसओ का इस्तेमाल अमेरिका से नहीं किया जाता है ... – Joey

उत्तर

50

आप इस कोशिश कर सकते हैं:

var myString = "EMA123_33"; 
var onlyLetters = new String(myString.Where(Char.IsLetter).ToArray()); 

कृपया ध्यान दें: इस संस्करण "ई" सिर्फ 'ई' की तरह मिल जाएगा - अगर आप केवल ऊपरी-केस अक्षरों की आवश्यकता है, तो इस तरह कुछ करें:

var myString = "EMA123_33"; 
var onlyLetters = new String(myString.Where(c => Char.IsLetter(c) && Char.IsUpper(c)).ToArray()); 
+2

आपको 'चार्स' प्रॉपर्टी का उपयोग करने की आवश्यकता नहीं है, स्ट्रिंग संख्यात्मक है, हालांकि आपको स्ट्रिंग कन्स्ट्रक्टर के लिए सरणी बनाने के लिए' ToArray' का उपयोग करने की आवश्यकता है, आप 'IENumerable ' से स्ट्रिंग नहीं बना सकते हैं। – Guffa

+0

आह - धन्यवाद ... (चेक नहीं किया गया) - बीटीडब्लू: मुझे लगता है कि। कोर अधिक पठनीय है - लेकिन यह स्वाद का मामला हो सकता है – Carsten

+0

मैं इसे 'चार्स' का उपयोग करके संकलित करने के लिए भी नहीं मिला। इंडेक्सर को 'चार्स' नाम दिया गया है, इसलिए आप वीबी में 'एस। चार्स (0)' का उपयोग कर सकते हैं लेकिन यह सी # में '0]' है। – Guffa

11

आप सभी गैर-लेटे को बदलने के लिए नियमित अभिव्यक्ति का उपयोग कर सकते हैं रु:

string s2 = Regex.Replace(s, @"[^A-Z]+", String.Empty); 
+2

कार्टन के उत्तर में गैर-रोमन वर्णमाला के साथ काम करने का लाभ है। आपको यूटीएफ चरित्र वर्गों का उपयोग करने पर विचार करना चाहिए ('\ p {IsLetter} 'मुझे लगता है) –

+0

@ रिचर्ड Szalay: हाँ, यह एक विकल्प है। यह इस बात पर निर्भर करता है कि ओपी क्या व्यवहार चाहता है। – Guffa

+2

\ * twitches \ * रिचर्ड, वे यूनिकोड चरित्र वर्ग हैं। यूटीएफ केवल यूनिकोड के लिए रूपांतरण प्रारूपों को लेबल करता है और वास्तव में चरित्र सेट का संदर्भ नहीं देता है। – Joey

3

तुम सिर्फ प्रारंभिक पत्र के बाद कर रहे हैं, स्ट्रिंग के शुरू में उन यानी (अपने उदाहरण एक सा है कि में स्पष्ट नहीं मैं नहीं जानता कि क्या में पत्र क्या होगा रहे हैं स्ट्रिंग के अंत), तो आपको एक अलग regex का उपयोग कर सकते हैं:

string s2 = Regex.Replace(s, @"(\p{L}+).*", "$1"); 
+1

भले ही यह एक अतिरिक्त आवश्यकता थी, मुझे लगता है कि 'टेकवाइल्ड' का उपयोग करने के लिए कार्टन का जवाब बदलना अधिक कुशल और समझने में आसान होगा। –

+0

शायद, शायद नहीं। स्ट्रिंग मैनिप्लेशंस से संबंधित कोड पढ़ने पर मैं LINQ की तुलना में नियमित अभिव्यक्ति लेता हूं, मुझे लगता है। – Joey

+0

मेला, लेकिन मुझे लगता है कि बहुसंख्यक लोग LINQ के साथ अधिक समान हैं, वे यूनिकोड चरित्र वर्गों और रेगेक्स में उनके वाक्यविन्यास के साथ हैं। –

1
Regex MyRegex = new Regex("[^a-z]", RegexOptions.IgnoreCase); 
string s = MyRegex.Replace(@"your 76% strings &*81 gose _ here and collect you want_{ (7 438 ?. !`", @""); 
Console.WriteLine(s); 

उत्पादन

yourstringsgosehereandcollecyouwant

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