2011-10-17 15 views
17

क्या "_" से पहले सभी वर्णों को निकालने का कोई आसान तरीका है? उदाहरण के लिए, 3.04_somename.jpg से somename.jpg बदलें।एक वर्ण से पहले सभी पाठ को हटाने के लिए regex

रेगेक्स लिखना सीखने के लिए कोई सुझाव भी बहुत अच्छा होगा। जिन स्थानों पर मैं जांच करता हूं उन्हें सीखना मुश्किल होता है।

+0

किस भाषा में? रेगेक्स की कुछ किस्में आप देखते हैं। –

+1

यह एक क्लासिक http://www.regular-expressions.info/tutorial.html – xanatos

+0

पहले है, यह मुश्किल नहीं है। और, आपको यह इंगित करने की आवश्यकता है कि आपकी समस्या किस स्थिति में है। –

उत्तर

49
^[^_]*_ 

सभी पाठों को पहले अंडरस्कोर से मेल करेगा। खाली स्ट्रिंग के साथ बदलें।

उदाहरण के लिए, सी # में:

resultString = Regex.Replace(subjectString, 
    @"^ # Match start of string 
    [^_]* # Match 0 or more characters except underscore 
    _  # Match the underscore", "", RegexOptions.IgnorePatternWhitespace); 

regexes सीखने के लिए, http://www.regular-expressions.info

+0

किसी भी विचार को जावास्क्रिप्ट में यह कैसे करना है? – Lukasz

+1

रेगेक्स बिल्कुल वही है; जिस साइट से मैंने लिंक किया है, उसमें जावास्क्रिप्ट में रेगेक्स को प्रतिस्थापित करने के बारे में सारी जानकारी शामिल है। –

+0

@ लुकाज़ - जावास्क्रिप्ट में आप करते हैं: var परिणाम = '3.04_somename.jpg'।प्रतिस्थापित करें (/^[^ _] * _ /, ''); – romiem

0

पर एक नज़र डालें मैं इस वेबसाइट से अपने सभी Regex सीखा: http://www.zytrax.com/tech/web/regex.htm। Google 'रेगेक्स ट्यूटोरियल्स' पर Google और आपको हेलफुल लेखों का भार मिलेगा।

String regex = "[a-zA-Z]*\.jpg"; 
System.out.println ("somthing.jpg".matches (regex)); 

सत्य लौटाता है।

+0

आप डॉट से बचना चाहते हैं :) –

+0

हाहा, तुम सही हो! – Hidde

2

टिम एक के संस्करण, केवल Regex के कुछ कार्यान्वयन पर अच्छा: ^.*?_

var subjectString = "3.04_somename.jpg"; 
var resultString = Regex.Replace(subjectString, 
    @"^ # Match start of string 
    .*? # Lazily match any character, trying to stop when the next condition becomes true 
    _  # Match the underscore", "", RegexOptions.IgnorePatternWhitespace); 
4

रेगुलर एक्सप्रेशन:

^[^_]*_(.*)$ 

तो कोष्ठक के बीच हिस्सा मिलता है। पर्ल में:

my var = "3.04_somename.jpg"; 
$var =~ m/^[^_]*_(.*)$/; 
my fileName = $1; 

जावा में:

String var = "3.04_somename.jpg"; 
String fileName = ""; 
Pattern pattern = Pattern.compile("^[^_]*_(.*)$"); 
Matcher matcher = pattern.matcher(var); 
if (matcher.matches()) { 
    fileName = matcher.group(1); 
} 

...

1

एक स्थानापन्न करने के लिए कोई जरूरत नहीं। रेगुलर एक्सप्रेशन से आप दे देंगे क्या यू सीधे चाहता था:

"(?<=_)[^_]*\.jpg" 

ग्रेप के साथ परीक्षण किया:

echo "3.04_somename.jpg"|grep -oP "(?<=_)[^_]*\.jpg" 
somename.jpg 
0

जावास्क्रिप्ट में मैं /.*_/ का प्रयोग करेंगे, जिसका अर्थ है: जब तक _ (सहित) सब कुछ से मेल

उदाहरण:

console.log('hello_world'.replace(/.*_/,'')) // 'world' 
संबंधित मुद्दे