是否有一种简单的方法可以在“_”之前删除所有字符?例如,将3.04_somename.jpg
更改为somename.jpg
。
任何关于在哪里学习编写正则表达式的建议都会很棒。我检查的大多数地方都很难学习。
答案 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。