2009-07-08 14 views
6

का उपयोग कर मैं केवल fileName मिलान करने के लिए, यानी चाहते हैं फ़ाइल नाम,निकालने Regex

C://Directory/FileName.cs में

, किसी भी तरह Regex का उपयोग करके FileName.cs से पहले सब कुछ ध्यान न दें।

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

मुझे इसे एक संकलित यूआई के लिए चाहिए जिस पर मैं काम कर रहा हूं ... प्रोग्रामिंग भाषा का उपयोग नहीं कर सकता क्योंकि यह केवल रेगेक्स स्वीकार करता है।

कोई विचार?

+1

मुझे हमेशा आश्चर्य होता है कि जब लोग एक सरल समाधान करते हैं तो लोग रेगेक्स क्यों मांगते हैं। –

+0

@ सुमेश, क्या मैंने आपके उत्तर में आपके द्वारा प्रदान किए गए regEx किया था? यदि ऐसा नहीं होता है, तो क्या आप अपने इंजन द्वारा विशिष्ट regEx सुविधाओं का समर्थन करने के बारे में अधिक जानकारी प्रदान कर सकते हैं? –

+0

नहीं, यह काम नहीं करता है, यह इंजन केवल रेगेक्स का समर्थन करता है, दो पैरा 1 पैरा हैं। दूसरी पैरामीटर स्कैन करने के लिए फ़ाइल। मिलान करने के लिए पैटर्न फ़ाइल के पथ को कुछ और निर्दिष्ट किया गया है।यहां समस्या यह है कि, मेरे एप्लिकेशन नियम का कहना है कि फ़ाइल नाम में "abc" नहीं होना चाहिए, लेकिन एबीसी फ़ाइल पथ में हो सकता है, उदाहरण के लिए, सी: //folder/abc/folder/fileName.cs अब मुझे किसी भी तरह से पास करने की आवश्यकता है एक regex ताकि इंजन केवल फ़ाइल को स्कैन कर पूरे पथ नहीं। इसलिए, पहले पैरा में, अगर मैं फ़ाइल नाम निर्दिष्ट कर सकता हूं, यानी .cs के पहले/लेकिन कुछ भी, तो सभी को खुश होना चाहिए। –

उत्तर

5

आप किस भाषा का उपयोग कर रहे हैं? आप उस भाषा के मानक पथ तंत्र का उपयोग क्यों नहीं कर रहे हैं?

कैसे http://msdn.microsoft.com/en-us/library/system.io.path.aspx के बारे में?

+0

यह। विशेष रूप से GetFileName() विधि। – Turnor

+0

मैं सहमत हूं, एपीआई पहले, regex दूसरा। –

13

इस तरह कुछ काम कर सकते हैं:

[^/]*$ 

यह पंक्ति के अंत कि नहीं कर रहे हैं "/" ..

आप रास्तों का उपयोग करने वाले "मैच के लिए \ चाहते हैं करने के लिए सभी से मेल खाता है "पथ विभाजक आप करने के लिए regex बदल जाएगा:

[^\]*$ 

लेकिन से बचने के लिए सुनिश्चित करें कि" \ "चरित्र यदि आपके प्रोग्रामिंग भाषा या पर्यावरण यह आवश्यकता है। उदाहरण के लिए आप कुछ इस तरह लिखने के लिए हो सकता है:

 
[^\\]*$ 

संपादित मैं हटाया अग्रणी "/" और अनुगामी के बाद से वे वास्तव में regex का हिस्सा नहीं हैं वे भ्रमित हो सकता है "/" ​​के रूप में लेकिन वे एक नियमित अभिव्यक्ति का प्रतिनिधित्व करने के बहुत आम हैं।

और निश्चित रूप से, रेगेक्स इंजन का समर्थन करने वाली सुविधाओं के आधार पर आप एक बेहतर regEx तैयार करने के लिए लुक-आगे/लुक-बैक और कैप्चरिंग का उपयोग करने में सक्षम हो सकते हैं।

+0

लक्ष्य स्ट्रिंग में से किसी एक से मिलान करने के लिए आपको हमेशा रेगेक्स में दो बैकस्लैश का उपयोग करना होगा। यदि आप जावा जैसी भाषा का उपयोग कर रहे हैं जो रेगेक्स अक्षर या कच्चे/क्रियात्मक तार प्रदान नहीं करता है, तो आपको उन्हें दोबारा से बचाना होगा: "[^ \\\\] *" –

+0

lol मैंने एक घंटे के साथ गड़बड़ कर बिताया lookbehinds और finaly काम करने के लिए 100 अक्षर के साथ एक regex मिला ... तो मैंने तुम्हारा देखा ... पीछे सभी देखो हटा दिया और यह अभी भी काम किया। : पी – Victor

0

मैं इसका उपयोग करूंगा:। /( $)

ब्रांड्स एक समूह को चिह्नित करता है जो फ़ाइल नाम है। वाले रेगुलर एक्सप्रेशन रेगुलर एक्सप्रेशन से वाक्य रचना पर dependig (PCRE, POSIX)

मैं तुम्हें एक regex उपकरण का उपयोग sugest भिन्न हो सकते हैं का उपयोग करें, वहाँ विंडोज और लिनक्स के लिए कई हैं:

विंडोज - http://sourceforge.net/projects/regexcreator/

विंडोज - http://weitz.de/regex-coach/

लिनक्स - kodos

आशा है कि यह मदद करता है

4

रास्तों कि 'एबीसी' से मेल नहीं खाते को बाहर करने की आवश्यकता होगी, की अपनी टिप्पणी के आधार पर, इस प्रयास करें:

^.+/(?:(?!abc)[^/])+$ 


पूरी तरह से regex टिप्पणी मोड में बाहर विभाजित है, वह यह है कि:

(?x)  # flag to enable comments 
^  # start of line 

.+  # match any character (except newline) 
     # greedily one or more times 
/  # a literal slash character 

(?:  # begin non-capturing group 
    (?!  # begin negative lookahead 
      # (contents must not appear after the current position) 
    abc  # literal text abc 
)  # end negative lookahead 
    [^/]  # any character that is not a slash 
)  # end non-capturing group 
+  # repeat the above nc group one or more times 
     # (essentially, we keep looking for non-backspaces that are not 'abc') 

$  # end of line 
0

मिकी पर बस एक भिन्नता जो फाइल सिस्टम पथ दोनों अक्षरों के लिए काम करती है: [^\\/]*\s

0

मान लीजिए फ़ाइल मेरे पास विशेष पात्र हैं, खासकर जब मैक का समर्थन करते हैं जहां विशेष पात्र फ़ाइल नामों में अनुमति दे रहे हैं, सर्वर साइड पथ। गेटफाइलनाम (फ़ाइल नाम) पथ में अवैध पात्रों की वजह से विफल रहता है और त्रुटि फेंकता है। रेगेक्स का उपयोग कर निम्नलिखित कोड बचाव के लिए आते हैं। (: \ Samplefolder \ सबफ़ोल्डर \ sample.xls अर्थात ग)

निम्नलिखित 2 बातें

  1. आईई में की regex ले देखभाल, जब फ़ाइल अपलोड होने, फ़ाइल पथ फ़ोल्डरों में अच्छी तरह से शामिल हैं। नीचे अभिव्यक्ति खाली स्ट्रिंग वाले सभी फ़ोल्डरों को प्रतिस्थापित करेगी और फ़ाइल नाम

  2. मैक में उपयोग किए जाने पर, फ़ाइल नाम केवल सफारी ब्राउज़र के रूप में प्रदान की जाने वाली एकमात्र चीज है और फ़ाइल नाम में विशेष वर्णों की अनुमति देता है।

    var regExpDir = @"(^[\w]:\\)([\w].+\w\\)"; 
    
    var fileName = Regex.Replace(fileName, regExpDir, string.Empty); 
    
1

मैं जिस तरह से पार्टी के लिए देर हो रही है और मैं भी regex की आवश्यकता को अनदेखा कर रहा हूँ के रूप में जे-16 SDiZ ने कहा, कभी कभी एक बेहतर समाधान है, क्योंकि। भले ही सवाल 4 साल पुराना है, लेकिन साधारण समाधान की तलाश करने वाले लोग विकल्प के लायक हैं।

निम्नलिखित उपयोग करके देखें:

public string ConvertFileName(string filename) 
    { 
     string[] temparray = filename.Split('\\'); 
     filename = temparray[temparray.Length - 1]; 
     return filename; 
    } 

इस विधि "\" चरित्र पर स्ट्रिंग विभाजन, एक सरणी में जिसके परिणामस्वरूप तार संग्रहीत करता है और सरणी (फ़ाइल का नाम) के अंतिम तत्व देता है।

हालांकि ओपी यूनिक्स के लिए लिख रहा है, लेकिन यह समझने के लिए बहुत कुछ नहीं लगता कि इसे आपकी विशेष आवश्यकता के अनुरूप कैसे बनाया जाए।

+0

यदि आप सी # मार्ग पर जा रहे हैं, तो क्यों नहीं [पथ। गेटफाइलनाम के साथ एक्सटेंशन] का उपयोग करें (http://msdn.microsoft.com/en-us/library/system.io.path.getfilenameWithoutextension.aspx)? – keyboardP

+0

@keyboardP एक विकल्प है, लेकिन मेरे विशेष मामले में, एक्सटेंशन दृश्य दृश्य के रूप में महत्वपूर्ण हैं। इसके अतिरिक्त, मैं जिस फ़ाइलपैथ का उपयोग कर रहा हूं उसे ओपनफाइलडियलॉग द्वारा उत्पन्न किया गया है। मैं केवल यूआई के लिए एक छोटी सी स्ट्रिंग बनाने के लिए कनवर्टर का उपयोग करता हूं और, चूंकि ओपी का उल्लेख है, मैं फाइल नाम का सब कुछ nixing से संबंधित हूं, इसके बाद नहीं। – spugm1r3