2016-04-14 19 views
1

Çabalarım: Benzer sorulara bakmayı denedim, ancak cevabımı çözemiyorum. Web'i (https://www.cheatography.com/davechild/cheat-sheets/regular-expressions/) kullanmayı denedim, ancak bunu doğru cevaplayamıyorum.Belirli bir karakterden önce ve sonra bir dizeyi değiştirmek için regex java kullanın

myString.replaceAll("_.+/[^.]*/", ""); kullanarak çalıştı bir dizesi vardır: String myString = "hello_AD123.mp3";

Ve (o dahil) VE (.mp3) önce durdurma alt çizgi sonra her şeyi KALDIR için regex java kullanmak istiyorum. Bunu nasıl yapardım? sizin dize eksik bir şey eşleşti çünkü myString = "hello.mp3";

+3

'myString = myString.replaceFirst (" _ [^.] * "," ");' –

+0

Beni bununla döv, güzel – dambros

+1

Kaldırır, ben gerçekten denedim. – dambros

cevap

1

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.

    • VEYA
  • .*[.] - 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.

+0

Tek tek kullandığınız normal ifadeyi açıklar mısınız lütfen? Bunun neden böyle kullanıldığını anladım. Yine de çalışıyor! – deeveeABC

+1

Teşekkürler umarım temizledim :) –

+0

OP chars _between_ '_' ve '.mp3' kaldırmak istiyor, bu yüzden 'myString.replaceFirst ("_. * \\. Mp3", "_. mp3 ");' veya (eşleşen grupları kullanmak için) 'myString.replaceFirst (" (_) (. *) (\\. mp3) "," $ 1 $ 3 ");'. – Andy

İlgili konular