2010-01-12 10 views
12

मैं इस तरह की एक स्ट्रिंग है:C# निकालने मूल्यों

blablablamorecontentblablabla?name=michel&score=5&age=28&iliedabouttheage=true 

एक नियमित रूप से क्वेरी स्ट्रिंग हाँ की तरह दिखता है, लेकिन मैं

अब किसी भी वेब संदर्भ में नहीं कर रहा हूँ मैं उदाहरण के लिए, मान (मिशेल) के बाद, नाम (माइकल), स्कोर (5), आयु (28) आदि

आम तौर पर मैं स्ट्रिंग को पार्स की तरह पार्स करना चाहता हूं शब्द 'नाम' की स्ट्रिंग में स्थिति, फिर इसमें 5 जोड़ें ('name =' की लंबाई) और इस स्थिति को 'स्टार्ट' नाम दें और फिरखोजें- हस्ताक्षर करें और उस स्थिति को 'end' नाम दें, और फिर स्थिति प्रारंभ और अंत के बीच स्ट्रिंग प्राप्त करें।

लेकिन एक बेहतर समाधान होना चाहिए, क्या यह एक रेगेक्स चीज है?

उत्तर

32

System.Web.HttpUtility.ParseQueryString प्रयास करें प्रश्न चिह्न के बाद सब कुछ में गुजर,। आपको System.Web असेंबली का उपयोग करने की आवश्यकता होगी, लेकिन इसे किसी वेब संदर्भ की आवश्यकता नहीं है।

+0

नौकरी के लिए सही उपकरण के लिए +1 – STW

+0

बहुत अच्छा है।विवरण के लिए वास्तव में नौकरी – Michel

3

नहीं वास्तव में, यह सिर्फ विभाजित करें फ़ंक्शन साथ किया जा सकता चीजें आप की जरूरत है

string[] query = value.Split('?'); 
foreach (string pairs in query[1].Split('&') 
{ 
    string[] values = pairs.split('='); 
} 

तो मान चर से अधिक पुनरावृति और मिल (क्या इस प्रकार थोड़े छद्म कोड है, तो आप बाध्य चेकों जोड़ने की जरूरत है) ।

+0

यह वापस जाने के लिए जा रहा है: मान = { "नाम", "मिशेल और स्कोर", "5 और उम्र", "28 और iliedabouttheage", "सच"} दिए गए उदाहरण के लिए मेरा मानना ​​है कि – Lazarus

+0

@Lazarus - आप सही हैं। –

+1

अरे, मैंने इस वर्ष के लिए पहले से ही "सही होने" का उपयोग किया है! ;) – Lazarus

1

आप सुझाव के रूप में, मैं regex, शायद की तरह

(?:.)*\?(.*\&.*)* 

मुझे पता है कि कुछ और है कि regex पहले भाग [कहा, मुझे लगता है कि] की अनदेखी करने के कारण के लिए इस्तेमाल किया जा सकता है एक पैटर्न की सिफारिश करेंगे, लेकिन मैं इसके बारे में सोच नहीं सकता। यही कारण है कि आप एक kvp मिलेगा, तो आप "&" पर परिणाम विभाजित करने के लिए होगा (String.Split ('&'))

0

आप '&' और फिर '=' पर एक विभाजन कर सकते हैं। आपको '?' सौदा करना होगा शुरू में। या यदि स्ट्रिंग हमेशा एक क्वेरी स्ट्रिंग की तरह 'देखो' होगा तो आप अब भी यह इस तरह के रूप में मानते हैं और इस वर्ग की तरह कुछ की कोशिश कर सकते QueryString class useful for querystring manipulation, appendage, etc

2

आप विभाजन विधि का उपयोग कर सकते हैं

private static void DoIt() 
{ 
    string x = "blablablamorecontentblablabla?name=michel&score=5&age=28&iliedabouttheage=true"; 

    string[] arr = x.Split("?".ToCharArray()); 
    if (arr.Length >= 2) 
    { 
     string[] arr2 = arr[1].Split("&".ToCharArray()); 
     foreach (string item in arr2) 
     { 
      string[] arr3 = item.Split("=".ToCharArray()); 
      Console.WriteLine("key = " + arr3[0] + " value = " + arr3[1]); 
     } 
    } 
} 

आउटपुट:

key = name value = michel 
key = score value = 5 
key = age value = 28 
key = iliedabouttheage value = true 
+0

+1 के लिए सही है। – Michel

2

मैं शायद स्प्लिट मार्ग पर जाउंगा।

string input = "name=michel&score=5&age=28&iliedabouttheage=true"; 
string[] pairs = input.Split('&'); 
Dictionary<string,string> results = new Dictionary<string,string>(); 
foreach (string pair in pairs) 
{ 
    string[] paramvalue = pair.Split('='); 
    results.Add(paramvalue[0],paramvalue[1]); 
} 
+0

धन्यवाद। वास्तव में वर्तमान समाधान तो बेहतर है। – Michel

15

आप तो आप LINQ का एक सा इस्तेमाल कर सकते हैं कुंजी/मान जोड़े का एक शब्दकोश बनाना चाहते हैं:

Dictionary<string, string> yourDictionary = 
    yourString.Split('?')[1] 
       .Split('&') 
       .Select(x => x.Split('=')) 
       .ToDictionary(y => y[0], y => y[1]); 

(आप Split('?')[1] भाग को छोड़ सकता है अगर आपके स्ट्रिंग बस क्वेरी स्ट्रिंग निहित । बल्कि पूरे यूआरएल से)

+0

वाह। अपने आप को पता लगा नहीं होता .. – Michel

+0

मुझे लगता है कि 'HttpUtility.ParseQueryString' विधि एरिक ने सुझाव दिया एक बेहतर सामान्य समाधान है, लेकिन यदि आप एक' शब्दकोश 'बजाय एक' NameValueCollection' तो ऐसा करेंगे की जरूरत छल। – LukeH

+1

यह लिंक कमांड शानदार है! विंडोज फोन में, आपके पास ParseQueryString तक पहुंच नहीं है और यह कोड वही करता है, धन्यवाद! –

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