2015-06-30 16 views
5

एफटीएक्स (फ्री टेक्स्ट) स्ट्रिंग को पार्स करते समय, मुझे इसे + का उपयोग एक डिलीमीटर के रूप में विभाजित करने की आवश्यकता है, लेकिन केवल तभी जब यह बचने वाले चरित्र (?) से पहले नहीं है। तो यह स्ट्रिंग nika ?+ marry = love+sandra ?+ alex = love को दो तारों पर पार्स किया जाना चाहिए: nika + marry = love और sandra + alex = loveString.Split('+') का उपयोग करना स्पष्ट रूप से पर्याप्त नहीं है। क्या मैं इसे किसी भी तरह से प्राप्त कर सकता हूं?कस्टम पार्सिंग स्ट्रिंग

एक तरह से, मुझे लगता है, कुछ अद्वितीय चरित्र (या पात्रों में से एक उत्तराधिकार) के साथ ?+ की घटनाओं को बदलने के लिए है, कहते हैं, @#@, विभाजन "+" परिसीमक के रूप में उपयोग करते हुए और फिर + को वापस @#@ की जगह, लेकिन यह अविश्वसनीय और गलत है जिस तरह से मैं सोच सकता हूं।

? किसी भी अन्य मामले में इसे नियमित चरित्र के रूप में देखा जाता है, तो : या + के साथ संयोजन में केवल बचने वाले चरित्र के रूप में उपयोग किया जाता है।

+2

आप इस के लिए रेगुलर एक्सप्रेशन का उपयोग करने की कोशिश कर सकते हैं। –

+0

क्या आप अधिक विशिष्ट हो सकते हैं? – nicks

+1

क्या खुश हुआ अगर शब्द "वाक्य" में मौजूद है? तो ''? +' 'को प्रतिस्थापित करने का आपका तर्क काम नहीं करता .. –

उत्तर

3

एक भयानक नियमित अभिव्यक्ति इसे विभाजित करना:

string str = "nika ?+ marry = love??+sandra ???+ alex = love"; 
string[] splitted = Regex.Split(str, @"(?<=(?:^|[^?])(?:\?\?)*)\+"); 

यह पर एक + (\+) कि स्ट्रिंग (^) या एक गैर ? चरित्र ([^?]) की शुरुआत से पहले किया जाता है के साथ साथ एक विभाजन यहां तक ​​कि ? की संख्या ((?:\?\?)*)। (?:) (गैर-कैप्चरिंग समूह) का उदार उपयोग है क्योंकि Regex.Split कई कैप्चरिंग समूह होने पर मजेदार चीजें करता है।

ध्यान दें कि मैं अनदेखा नहीं कर रहा हूं! तो अंत में ?+?+ बनी हुई है।

+0

पर संपादित देखें यदि स्ट्रिंग '? +' के साथ समाप्त होती है तो क्या होगा? अब मुझे कुछ भी नहीं या खाली स्ट्रिंग वापस करनी चाहिए। आपका कुछ भी वापस नहीं आता है, मेरा खाली स्ट्रिंग देता है। भयानक regex के लिए भी +1! – dotctor

+0

@ डॉटक्टर मैं अनचाहे नहीं कर रहा हूं ... – xanatos

1
using System; 
using System.Collections.Generic; 
using System.Text.RegularExpressions; 

public class Program 
{ 
    public static void Main() 
    { 
     string s = "nika ?+ marry = love+sandra ?+ alex = love"; 
     string[] result = Regex.Split(s, "\\?{0}\\+", RegexOptions.Multiline);     
     s = String.Join("\n", result);  
     Regex rgx = new Regex("\\?\\n"); 
     s = rgx.Replace(s, "+"); 
     result = Regex.Split(s, "\\n", RegexOptions.Multiline);       
     foreach (string match in result) 
     { 
      Console.WriteLine("'{0}'", match); 
     } 
    } 
} 

आउटपुट

'nika + marry = love' 
'sandra + alex = love' 

देखें https://dotnetfiddle.net/HkcQUw

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