2017-04-25 11 views
14

मैं स्ट्रिंग के निम्नलिखित प्रकार विभाजित करना चाहते हैं:स्प्लिट से '/' जब तक '[' प्रतीत होता है

माता-पिता/बच्चे/मूल्य [4za] कुल्हाड़ी/द्वारा

और एक बनाने के हो String[] इसे से बाहर के माध्यम से:

String[] ArrayVar = Regex.Split(stringVar, "?"); 

जो [ की पहली उपस्थिति से पहले हर / द्वारा स्ट्रिंग अलग हो गए।

तो परिणाम के रूप में मैं मिलेगा

Array[0] => "Parent" 
Array[1] => "Child" 
Array[2] => "Value [4za] AX/BY" 

तार भी तरह

जनक अन्य प्रारूपों हो सकता था/मूल्य [4za] कुल्हाड़ी/द्वारा

मूल्य [4za] कुल्हाड़ी/द्वारा

मैं यह कैसे कर सकता हूं?

उत्तर

24

नकारात्मक दिखने का उपयोग करें ((?<!...))। निम्नलिखित regex का अर्थ है "/ ब्रैकेट खोलने से पहले नहीं":

(?<!\[.*)/ 

Demo

सी # डेमो: https://dotnetfiddle.net/85S3cK

+1

FYI करें: स्ट्रिंग पंक्ति विराम होता है, तो यह एक Singleline, regex इंजन के लिए विकल्प पारित करने के लिए ("dotall") 'उपयोगी हो सकता है @ "(? एस) (?

+0

और यदि इंजन मनमाने ढंग से लम्बा दिखने का समर्थन नहीं करता है? –

+0

@QPaysTaxes, मनमाने ढंग से लम्बे समय के बिना, एक एकल regex कथन या तो असंभव या संभावित तरीका होगा, जो कि TheLethalCoder के उत्तर जैसे समाधान पर प्रयास और पठनीयता में लागत के लायक है। – asgallant

33

आप सामान्य स्ट्रिंग आपरेशन इस्तेमाल कर सकते हैं यह करने के लिए। बस पहले [ पर स्ट्रिंग को विभाजित करें और उसके अनुसार विभाजित करें। तो बस पिछले तत्व पर स्ट्रिंग के अंत हिस्सा जोड़ें:

string inputstring = "Parent/Child/Value [4za] AX/BY"; 

int index = inputstring.IndexOf('['); 

string[] parts = inputstring.Substring(0, index).Split('/'); 
parts[parts.Length - 1] += inputstring.Substring(index); 
+1

यदि' Regex' संकलित नहीं किया गया है तो यह विधि वास्तव में तेज़ी से हो सकती है। – Pharap

+3

भले ही रेगेक्स संकलित हो, यह शायद तेज़ है। – Mardoxx

+0

यह ठीक है, लेकिन एक लाइनर खराब नहीं है और पर्याप्त पठनीय है। –

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

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