2010-10-27 10 views
6

मुझे यकीन है कि एक आसान समाधान है, लेकिन मुझे लगता है कि यह गायब है।रेगेक्स सी # समस्या

मैं एक regex की जरूरत है ऐसा करने के लिए निम्नलिखित:

asdf.txt;qwer से मेल खाना चाहिए asdf.txt

"as;df.txt";qweras;df.txt

से मेल खाना चाहिए जैसा कि आप देख सकते हैं, मैं सेमी-कोलन से मेल करने की जरूरत है, लेकिन यदि उद्धरण मौजूद हैं (जब मूल्य में अर्द्ध-कॉलन होता है), तो मुझे उद्धरण के अंदर मिलान करना होगा। चूंकि मैं एक फ़ाइल नाम की तलाश में हूं, इसलिए मूल्य में कभी भी उद्धरण नहीं होगा।

रेगेक्स का मेरा स्वाद सी # है।

आपकी मदद के लिए धन्यवाद! बस उसके बाद df.txt इन कर सकते हैं;

string s = "asdf.txt;qwer"; 
string s1 = "\"as;df.txt\";qwer"; 

return s.Contains("asdf.txt"); //returns true 
return s1.Contains("\"as;df.txt\""); //returns true 
+0

आप कोट के अंदर (\ की तरह "या" ") उद्धरण भाग निकले कर सकते है? –

उत्तर

2
"[^"]+"(?=;)|[^;]+(?=;) 

इस दोहरे अर्धविराम या पाठ अर्धविराम के बाद के बाद उद्धरण के भीतर पाठ से मेल खाता है। अर्धविराम मैच में शामिल नहीं है।

संपादित करें: मेरा पहला प्रयास उद्धरण से मेल खाता है। निम्नलिखित अभिव्यक्ति उद्धरण को बहिष्कृत करेगी, लेकिन उप-अभिव्यक्तियों का उपयोग करती है।

"([^"]+)";|([^;]+); 
+0

मैंने कभी इसका इस्तेमाल नहीं किया? = नोटेशन। इसे क्या कहा जाता है और इसका क्या समर्थन करता है? –

+1

यह 'लुक-आगे बराबर' है। यह कम से कम .NET और जावास्क्रिप्ट द्वारा समर्थित है। नियमित अभिव्यक्तियों का परीक्षण करने के लिए मेरी पसंदीदा साइट http: // www है .regexlib.com/RETester.aspx। यह जावास्क्रिप्ट और .NET सहित कई इंजनों का समर्थन करता है। –

+1

आपने मुझे सही रास्ते पर पहुंचाया है। यहां रेगेक्स मैंने चुना है (? <= ")? [^"] + (? = "?;)' –

0

आप regex का उपयोग करने की आवश्यकता है, तो आप सिर्फ इस्तेमाल कर सकते हैं सी # स्ट्रिंग विधि शामिल अपने दो regex epressions हो। तो कुछ की तरह कुछ।

Matches matches = Regex.Matches('asdf.txt;qwer',"asdf.txt"); 

और

Matches matches = Regex.Matches('"as;df.txt";qwer',"as;df.txt"); 

का आनंद लें!

0

आप देख रहे हैं दो स्पष्ट तार asdf.txt और के रूप में के लिए:

+0

वे उन विशिष्ट तार नहीं हैं। वे किसी भी वैध फ़ाइल नाम –

1

यह आपको क्या करना चाहिए:

(".*"|.*); 

यह तकनीकी रूप से और साथ ही अर्धविराम से मेल खाता है, लेकिन आप उस काटना या तो कर सकते हैं बंद या सिर्फ backreference (सी # backreferences समर्थन करता है) का उपयोग

1

यह मेल खाएगा यदि 0 उद्धरण हैं तो ; पर कोई उद्धरण या उद्धृत पाठ नहीं है, तो ; पर जाएं।

("[^"]+";|[^;]+;) 
+0

इस मैच अर्धविराम शामिल होंगे हो सकता है। –

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