正则表达式删除字符前的所有文本

时间:2011-10-17 12:47:48

标签: regex

是否有一种简单的方法可以在“_”之前删除所有字符?例如,将3.04_somename.jpg更改为somename.jpg

任何关于在哪里学习编写正则表达式的建议都会很棒。我检查的大多数地方都很难学习。

6 个答案:

答案 0 :(得分:58)

^[^_]*_

将匹配所有文本到第一个下划线。用空字符串替换它。

例如,在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

答案 1 :(得分:5)

正则表达式:

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

然后得到括号之间的部分。 在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);
}

...

答案 2 :(得分:3)

Tim的变体,只对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);

答案 3 :(得分:1)

无需更换。正则表达式会直接给你你想要的东西:

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

用grep测试:

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

答案 4 :(得分:1)

在Javascript中我会使用/.*_/,意思是:匹配所有内容直到_(包括)

示例:

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

答案 5 :(得分:0)

我从这个网站上学到了所有正则表达式:http://www.zytrax.com/tech/web/regex.htm。 谷歌在“正则表达式教程”上你会找到大量有用的文章。

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

返回true。