2012-03-19 18 views
10

यदि मेरे पास संख्याओं के साथ डेटा की एक स्ट्रिंग है। यह पैटर्न संगत नहीं है। मैं स्ट्रिंग से सभी संख्याओं को निकालना चाहता हूं और केवल एक वर्ण जिसे अनुमति के रूप में परिभाषित किया गया है। मैंने सोचा कि RegEx ऐसा करने का सबसे आसान तरीका हो सकता है। आप एक regex गपशप के रूप में मुझे लगता है कि regex वूडू और केवल regex दवा पुरुषों पता है कि यह कैसे काम करता हैRegEx संख्याओं के अलावा सभी वर्णों को बदलने के लिए

जैसे/

"Q1W2EE3R45T" = "12345" 
"WWED456J" = "456" 
"ABC123" = "123" 
"N123" = "N123" //N is an allowed character 

अद्यतन है कि ऐसा कर सकते हैं प्रदान कर सकता है:

: यहाँ मेरी कोड है
var data = Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
data = data.Select(x => Regex.Replace(x, "??????", String.Empty)).ToArray(); 
+0

की तर्ज पर कुछ के बारे में तार बहुत लम्बे होते हैं ?? एक विकल्प नहीं है ??? – gbianchi

+0

नीचे वोट क्यों ?? – Jon

+0

'" रेगेक्स वूडू है और केवल रेगेक्स दवा पुरुषों को पता है कि यह कैसे काम करता है "। सच नहीं! एक बार जब आप इसके बारे में सावधानी से सोचते हैं, तो टुकड़े से टुकड़ा हो जाता है। – katrielalex

उत्तर

12
String numbersOnly = Regex.Replace(str, @"[^\d]", String.Empty); 

Regex.Replace(string,string,string) स्थैतिक विधि का उपयोग करना।

Sample

N आप [^\dN] के पैटर्न सेट कर सकते हैं। यदि आप n की तलाश में हैं तो आप या तो RegexOptions.IgnoreCase लागू कर सकते हैं या कक्षा को [^\dnN]

+0

ओह! मुझे एहसास हुआ कि मुझे 'एन' चरित्र – Jon

+1

की अनुमति देने की आवश्यकता है, मुझे लगता है कि यह [^ \ dN] – Jon

+0

@ जोन: 'N' के लिए अनुमति देने के लिए मेरा उत्तर अपडेट किया गया। –

3

रेगेक्स का उपयोग करने की आवश्यकता नहीं है! बस पात्रों को देखें और उनमें से प्रत्येक से पूछें कि क्या वे अंक हैं।

s.Where(Char.IsDigit) 

या यदि आप एक स्ट्रिंग के रूप में यह जरूरत

new String(s.Where(Char.IsDigit).ToArray()) 

संपादित जाहिर है आप भी 'N' की जरूरत है:

new String(s.Where(c => Char.IsDigit(c) || c == 'N').ToArray()) 

संपादित उदाहरण:

var data = Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
data = data.Select(s => 
    new String(s.Where(c => Char.IsDigit || c == 'N').ToArray()) 
).ToArray(); 

यह थोड़ी भयानक है - नेस्टेड लैम्बडास - तो आप स्पष्टता के लिए रेगेक्स का उपयोग करना बेहतर हो सकते हैं।

+0

क्या आप अपना उत्तर दिखाने के लिए अपने LINQ का उपयोग कर सकते हैं क्योंकि IsDigit केवल स्ट्रिंग में एक वर्ण की जांच करेगा? – Jon

+0

@ जोन क्या? मैं तुम्हारी सजा नहीं समझता। – katrielalex

+0

क्या आप अपने प्रश्न में कोड का उपयोग यह दिखाने के लिए कर सकते हैं कि आपका उत्तर इसमें कैसे फिट होगा – Jon

1

कैसे

String s = ""; 
for (int i = 0; i < myString.length;){ 
    if (Char.IsDigit(myString, i)){ s += myString.Chars[i]; } 
} 
+0

उपयोगकर्ता ने पोस्ट संपादित किया .. एन भी आवश्यक है ... – gbianchi

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