2011-10-17 331 views
17

是否有一個簡單的方法來刪除所有字符之前刪除所有文字之前,「_」?例如,將3.04_somename.jpg更改爲somename.jpg正則表達式字符

用於哪裏學來寫正則表達式將是巨大的任何建議。我檢查的大部分地方都很難學習。

+0

在哪種語言?有幾種正則表達式你看到。 –

+1

這是一個經典http://www.regular-expressions.info/tutorial.html – xanatos

+0

第一,也不是很難。而且,你需要指出你的問題在哪種情況下。 –

回答

49
^[^_]*_ 

將匹配所有文本直到第一個下劃線。將其替換爲空字符串。

例如,在C#:

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

對於學習正則表達式,看看http://www.regular-expressions.info

+0

任何想法如何在JavaScript中做到這一點? – Lukasz

+1

正則表達式是完全一樣的;我鏈接到的網站包含關於如何在JavaScript中執行正則表達式替換的所有信息。 –

+0

@Lukasz - 在JavaScript中你可以: var result ='3.04_somename.jpg'。替換(/^[^ _] * _ /,''); – romiem

0

我學會了從本網站我所有的正則表達式:http://www.zytrax.com/tech/web/regex.htm。 谷歌在'正則表達式教程',你會發現很多有趣的文章。

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

返回true。

+0

你會想要擺脫點:) –

+0

哈哈,你是對的! – Hidde

2

添的一個變種,僅好於正則表達式的一些實現:^.*?_

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

正則表達式:

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

然後得到括號之間的部分。 在Perl中:

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

在Java:

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" 

使用grep測試:

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

在Javascript中我會用/.*_/,意思是:匹配的一切,直到_(含)

例子:

console.log('hello_world'.replace(/.*_/,'')) // 'world'