Подтвердить что ты не робот

Regex удалить весь текст перед символом

Есть ли простой способ удалить все символы перед "_"? Например, измените 3.04_somename.jpg на somename.jpg.

Любые предложения о том, где научиться писать регулярное выражение, тоже будут хороши. Большинство мест, которые я проверяю, трудно узнать.

4b9b3361

Ответ 1

^[^_]*_

будет соответствовать всем текстам до первого подчеркивания. Замените это пустой строкой.

Например, в С#:

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

Ответ 2

Регулярное выражение:

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

Затем получите часть между скобками. В 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);
}

...

Ответ 3

Вариант Тима один, хороший только для некоторых реализаций 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

нет необходимости делать замену. регулярное выражение даст вам то, что вам нужно прямо:

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

проверено с помощью grep:

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

Ответ 5

Я изучил все свое Regex с этого сайта: http://www.zytrax.com/tech/web/regex.htm. Google в "Учебниках по регулярному выражению", и вы найдете множество полезных статей.

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

возвращает true.

Ответ 6

В Javascript я бы использовал /.*_/, что означает: совместить все до _ (включая)

Пример:

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