Kişisel regex işe yaramadı:
Yani nihai sonuç şu olmak istiyorum
_
- alt çizgi izledi .. .
.+
- bir veya daha fazla satır beslemesi
/
dışında herhangi karakterler - bir hazır /
sembolü
[^.]*
- Bir noktadan başka sıfır veya daha fazla karakter
/
- bir literal /
.
Giriş dizenizde eğik çizgi yok.
Sen
String myString = "hello_AD123.mp3";
myString = myString.replaceFirst("_.*[.]", ".");
// OR myString = myString.replaceFirst("_[^.]*", "");
System.out.println(myString);
IDEONE Java demo
desen _[^.]*
sonra bir alt çizgi ve bir hazır nokta dışında 0+ karakterler maçları Bkz kullanabilirsiniz. Dize .mp3
'dan önce noktalara sahipse, ile en son .
numarasına eşleşir ve .
ile değiştirilmesi gerekir.
regex Demo 1 ve Demo 2'a bakın.
Detaylar:
_
- _
[^.]*
maçları - sıfır veya daha fazla dışındaki karakterler (nedeniyle nicelik *
kadar) ile eşleşen a (negatif karakter sınıfı kullanıldığından, [^...]
bakınız) literal nokta ([...]
- karakter sınıfı içinde .
olarak) bir tam nokta karakteri (tam durma, nokta) olarak kabul edilir.
.*[.]
- Son edebi noktaya bir satır yukarı dışındaki 0 veya daha fazla karakter eşleşir (nokta tüketen, dolayısıyla, yedek deseni "."
olmalıdır). biz sadece bir tek arama yapmak ve değiştirme işlemi gerektiğinden
.replaceFirst()
kullanılır. Eşleşen alt tabaka eşleştirildiğinde, yedek desen
""
olduğu için boş bir dizeyle değiştirilir.
'myString = myString.replaceFirst (" _ [^.] * "," ");' –
Beni bununla döv, güzel – dambros
Kaldırır, ben gerçekten denedim. – dambros