it-swarm-id.com

regex untuk menghapus semua teks sebelum karakter

Apakah ada cara mudah untuk menghapus semua karakter sebelum "_"? Misalnya, ubah 3.04_somename.jpg menjadi somename.jpg.

Setiap saran untuk tempat belajar menulis regex akan bagus juga. Sebagian besar tempat yang saya periksa sulit dipelajari.

20
Lukasz
^[^_]*_

akan mencocokkan semua teks hingga garis bawah pertama. Ganti itu dengan string kosong.

Misalnya, dalam C #:

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

Untuk mempelajari regex, lihat http://www.regular-expressions.info

57
Tim Pietzcker

Ekspresi reguler:

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

Kemudian dapatkan bagian antara tanda kurung . Dalam Perl:

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

Di Jawa:

String var = "3.04_somename.jpg";
String fileName = "";
Pattern pattern = Pattern.compile("^[^_]*_(.*)$");
Matcher matcher = pattern.matcher(var);
if (matcher.matches()) {
    fileName = matcher.group(1);
}

...

5
Fred

Varian satu Tim, bagus hanya pada beberapa implementasi 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
xanatos

tidak perlu melakukan penggantian. regex akan memberikan apa yang Anda inginkan secara langsung:

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

diuji dengan grep:

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

Saya mempelajari semua Regex saya dari situs web ini: http://www.zytrax.com/tech/web/regex.htm ..__ Google di 'Regex tutorials' dan Anda akan menemukan banyak artikel yang bermanfaat.

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

mengembalikan true.

0
Hidde

Dalam Javascript saya akan menggunakan /.*_/, yang berarti: cocokkan semuanya sampai _ (termasuk)

Contoh:

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