2016-04-22 5 views
6

बस अप करने के लिए, लेकिन पिछले अवधिसरल Regex: सब कुछ पिछले डॉट जब तक

dog.jpg  -> dog 
abc123.jpg.jpg -> abc123.jpg 

मैं कोशिश की है

(.+?)\.[^\.]+$ 
+1

आपसे एक सवाल किया है? तो आपके लिए नियमित रूप से अभिव्यक्ति लिखने के लिए यहां नहीं है। – jonrsharpe

+0

'abcd',' a.b.c.d.e' जैसे मामले के लिए क्या? – rock321987

+0

भी, आप क्या चाहते हैं फ़ाइल एक्सटेंशन को हटाना है ?? आप REGEX के बजाय इसके लिए टूल का उपयोग क्यों नहीं करते ?? बेसनाम() की तरह? – aampudia

उत्तर

10

उपयोग अग्रदर्शी पिछले डॉट चरित्र बात पर जोर देना:

.*(?=\.) 

Live demo.

+0

यहां लुकहेड की कोई आवश्यकता नहीं है .. केवल – rock321987

+0

चरणों की संख्या बढ़ जाती है, यह बहुत अच्छा काम करता है – bigdowg

+1

यह हमेशा एक ही स्थान पर दो बार मेल खाता है। – sln

8

इस चाल करना होगा सहित नहीं हर चरित्र का मिलान करना चाहते से मेल

(.*)\. 

Regex Demo

पहले कब्जे वाले समूह में नाम शामिल है। आप $1 या \1 के रूप में यह उपयोग कर सकते हैं के रूप में अपनी भाषा के प्रति

+0

का उपयोग करके इसका परीक्षण कर रहा है इसमें यह मेरे लिए डॉट शामिल है – bigdowg

+1

@bigdowg आप इसका उपयोग कहां कर रहे हैं? यह सिर्फ मिलान किए गए हिस्से को दिखा रहा है .. हरा भाग (डेमो में) वास्तविक स्ट्रिंग को दिखाता है जो आप चाहते हैं – rock321987

+2

यह एक अच्छा जवाब है। – sln

3

रेगुलर एक्सप्रेशन लालची डिफ़ॉल्ट रूप से कर रहे हैं। इसका मतलब यह है कि जब एक रेगेक्स पैटर्न अधिक वर्णों से मेल खाने में सक्षम होता है, तो यह अधिक वर्णों से मेल खाता है।

यह आपके मामले में एक अच्छी बात है। तुम सब करने की ज़रूरत मैच पात्रों और फिर एक बिंदु है:

.*\. 

है,

. # Match "any" character 
* # Do the previous thing (.) zero OR MORE times (any number of times) 
\ # Escape the next character - treat it as a plain old character 
. # Escaped, just means "a dot". 

तो: डिफ़ॉल्ट रूप से लालची जा रहा है, के रूप में किसी भी चरित्र रूप में कई बार मेल खाते हैं आप कर सकते हैं (क्योंकि लालची) और फिर एक शाब्दिक बिंदु।

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