有没有一种简单的方法可以删除"_"前面的所有字符?例如,将3.04_somename.jpg
更改为somename.jpg
。
学习编写正则表达式的建议也很好。 我查看的大多数地方都难以理解。
有没有一种简单的方法可以删除"_"前面的所有字符?例如,将3.04_somename.jpg
更改为somename.jpg
。
学习编写正则表达式的建议也很好。 我查看的大多数地方都难以理解。
^[^_]*_
将匹配第一个下划线之前的所有文本。用空字符串替换它。
例如,在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
正则表达式:
^[^_]*_(.*)$
然后获取括号内的部分。 在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);
}
...
不需要进行替换。正则表达式可以直接给你想要的结果:
"(?<=_)[^_]*\.jpg"
使用grep进行测试:
echo "3.04_somename.jpg"|grep -oP "(?<=_)[^_]*\.jpg"
somename.jpg
这是Tim的一个变体,仅适用于某些正则表达式实现:^.*?_
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);
/.*_/
,意思是:匹配到下划线(包括下划线)之前的所有内容。console.log( 'hello_world'.replace(/.*_/,'') ) // 'world'
对于使用Notepad ++的用户,如果所有结果都被删除,除了一行,请尝试以下操作:
^.*_
$link_url = "https://www.subdomain.domain.com/files
$local_path= [System.Uri]::new($link_url)
将会返回 $local_path = /files
我从这个网站http://www.zytrax.com/tech/web/regex.htm学习了所有的正则表达式。 在谷歌上搜索“正则表达式教程”,你会找到很多有用的文章。
String regex = "[a-zA-Z]*\.jpg";
System.out.println ("somthing.jpg".matches (regex));
返回 true。