2011-01-24 20 views
10

मुझे अंतरिक्ष के आधार पर अंतरिक्ष के आधार पर नीचे की तरह एक स्ट्रिंग को विभाजित करने की आवश्यकता है। लेकिन उद्धरण के भीतर किसी भी स्थान को संरक्षित किया जाना चाहिए।रेगेक्स स्प्लिट स्ट्रिंग को उद्धरण

research library "not available" author:"Bernard Shaw" 

मैं C शार्प में यह करने के लिए कोशिश कर रहा हूँ

को
research 
library 
"not available" 
author:"Bernard Shaw" 

, मैं इस Regex है: अतः में एक और पद है, जो

research 
library 
"not available" 
author 
"Bernard Shaw" 

में स्ट्रिंग विभाजन से @"(?<="")|\w[\w\s]*(?="")|\w+|""[\w\s]*""" जो दुर्भाग्य से मेरी सटीक आवश्यकताओं को पूरा नहीं करता है।

मैं किसी भी रेगेक्स की तलाश में हूं, जो चाल करेगा।

किसी भी मदद की सराहना की।

उत्तर

25

जब तक हो सकता है कोई उद्धृत तार अंदर उद्धृत बच गए, निम्नलिखित काम करना चाहिए:

splitArray = Regex.Split(subjectString, "(?<=^[^\"]*(?:\"[^\"]*\"[^\"]*)*) (?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"); 

अंतरिक्ष पात्रों पर यह regex विभाजन केवल अगर वे पहले और उद्धरण का एक भी नंबर के बाद कर रहे हैं।

उन सभी के बिना regex उद्धरण बच गए, समझाया,

(?<=  # Assert that it's possible to match this before the current position (positive lookbehind): 
^  # The start of the string 
[^"]* # Any number of non-quote characters 
(?:  # Match the following group... 
    "[^"]* # a quote, followed by any number of non-quote characters 
    "[^"]* # the same 
)*  # ...zero or more times (so 0, 2, 4, ... quotes will match) 
)   # End of lookbehind assertion. 
[ ]  # Match a space 
(?=  # Assert that it's possible to match this after the current position (positive lookahead): 
(?:  # Match the following group... 
    [^"]*" # see above 
    [^"]*" # see above 
)*  # ...zero or more times. 
[^"]* # Match any number of non-quote characters 
$  # Match the end of the string 
)   # End of lookahead assertion 
+0

कैसे विभाजित करने के लिए यह बिंदुओं, प्रश्न चिह्न, exclama के साथ रिक्त स्थान के बजाय टयन अंक आदि। मैं उद्धरण के अंदर छोड़कर प्रत्येक वाक्य को एक-एक करके प्राप्त करने की कोशिश कर रहा हूं। उदाहरण के लिए: चलना। ** वापस मुड़ गया। ** लेकिन क्यों? ** और कहा "हैलो दुनिया। इस स्ट्रिंग को अलग करने वाली चीजें!" शर्म की बात है। ** – ErTR

+1

@ ErtürkÖztürk: यह अपने स्वयं के स्टैक ओवरफ्लो प्रश्न के योग्य है - एक टिप्पणी में उत्तर देने के लिए बहुत बड़ा है। –

+1

@TimPietzcker अच्छी तरह से मुझे नहीं पता क्यों, लेकिन मैंने लगभग एक ही सवाल पूछा (http://stackoverflow.com/questions/33886103/how-to-find-recurring-word-groups-in-text-with-c) और मुझे बहुत अधिक प्रतिक्रिया मिली है "यहां कोड लेखन सेवा नहीं है" या "यह स्पष्ट नहीं है" इसलिए मैं टिप्पणियों में अपना मौका आजमा रहा हूं। – ErTR

3

ये रहा:

सी #:

Regex.Matches(subject, @"([^\s]*""[^""]+""[^\s]*)|\w+") 

नियमित अभिव्यक्ति:

([^\s]*\"[^\"]+\"[^\s]*)|\w+ 
+0

हे, टिम के जवाब को नोटिस नहीं किया। यह विभाजन के लिए काम करेगा, यह मिलान के लिए है। –

+0

धन्यवाद जिवलैन, यह मेल खाने के लिए पूरी तरह से काम करता है। – itsbalur

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