2012-10-23 9 views
25

मैं केवल उन शब्दों को डबल कोट्स के भीतर निकालना चाहता हूं। इसलिए, यदि सामग्री है:रेगेक्स: सी # डबल कोट्स के भीतर पाठ निकालें

क्या आप "ईमेल" के माध्यम से आपको भेजे गए "प्रश्न" के जवाब देना चाहते हैं?

जवाब

  1. होना चाहिए आप
  2. सवाल
+1

क्या आप अपने उद्धृत तारों के भीतर से बच निकलने की उम्मीद कर रहे हैं? जैसा कि 'मैं हूं "5'7 \" "लंबा"? –

उत्तर

43

प्रयास करें इस regex:

\"[^\"]*\" 

या

\".*?\" 

व्याख्या करते हैं:

[^ character_group ]

नकारात्मक: वर्णमाला समूह में नहीं है जो किसी एकल चरित्र से मेल खाता है।

*?

संभव के रूप में पिछले तत्व शून्य या अधिक बार, लेकिन जैसा कि कई बार मेल खाता है।

और एक नमूना कोड:

foreach(Match match in Regex.Matches(inputString, "\"([^\"]*)\"")) 
    Console.WriteLine(match.ToString()); 

//or in LINQ 
var result = from Match match in Regex.Matches(line, "\"([^\"]*)\"") 
      select match.ToString(); 
10

@Ria के जवाब के आधार पर:

static void Main(string[] args) 
{ 
    string str = "Would \"you\" like to have responses to your \"questions\" sent to you via email?"; 
    var reg = new Regex("\".*?\""); 
    var matches = reg.Matches(str); 
    foreach (var item in matches) 
    { 
     Console.WriteLine(item.ToString()); 
    } 
} 

उत्पादन होता है:

"you" 
"questions" 

आप string.TrimStart उपयोग कर सकते हैं() और string.TrimEnd() यदि आप इसे नहीं चाहते हैं तो डबल कोट्स को निकालने के लिए।

7

मुझे रेगेक्स समाधान पसंद हैं। आप भी इस

string str = "Would \"you\" like to have responses to your \"questions\" sent to you via email?"; 
var stringArray = str.Split('"'); 

की तरह कुछ के बारे में सोच सकता है तो फिर सरणी से odd तत्वों ले लो।आप LINQ का उपयोग करते हैं, तो आप इसे इस तरह से कर सकते हैं:

var stringArray = str.Split('"').Where((item, index) => index % 2 != 0); 
2

यह भी @Ria से Regex चुरा लेता है, लेकिन आप उन्हें एक सरणी में प्राप्त करने के लिए जहाँ आप तो उद्धरण हटाने की अनुमति देता है:

strText = "Would \"you\" like to have responses to your \"questions\" sent to you via email?"; 
MatchCollection mc = Regex.Matches(strText, "\"([^\"]*)\""); 
for (int z=0; z < mc.Count; z++) 
{ 
    Response.Write(mc[z].ToString().Replace("\"", "")); 
} 
0

\s*(?:(?:(['"])(?<value>(?:\\\1|[^\1])*?)\1)|(?<value>[^'",]+?))\s*(?:,|$) 

इस के साथ या बिना उद्धरण चिह्नों के एक क्षेत्र को पार्स आउट जाएगा और मूल्य से बोलियां को बाहर निकाल देगा:

मैं सीएसवी और इन मेरे लिए काम किया में से कोई भी पार्स करने के लिए सी # में ऐसा करने की जरूरत है तो मैं इस के साथ आया था एम्बेडेड क्यू रखते हुए यूट्स और कॉमा। <value> में पार्स किए गए फ़ील्ड मान हैं। नामित समूहों का उपयोग किए बिना, या तो समूह 2 या 3 में मान होता है।

सीएसवी पार्सिंग करने के लिए बेहतर और अधिक कुशल तरीके हैं और यह खराब इनपुट की पहचान करने में प्रभावी नहीं होगा। लेकिन अगर आप अपने इनपुट प्रारूप के बारे में सुनिश्चित हो सकते हैं और प्रदर्शन कोई मुद्दा नहीं है, तो यह आपके लिए काम कर सकता है।

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