2017-10-03 7 views
1

これはかなり単純明快なはずですが、私は答えを見つけたり、それを思い付くことができません。私は、常に1つ以上の末尾の数字と潜在的に他の数字を持つStringを持っています。私はすべての末尾の数字を除いて文字列からすべてを削除したい。末尾の数字を除くすべてを置き換える正規表現

いくつかの例のテストケース:

"1 test50"    -> "50" 
"anothertest10"   -> "10" 
"can contain spaces123" -> "123" 
"ok1"     -> "1" 

私が最も明白なことを試みた:str.replaceAll(".*(\\d)+$","$1")を、残念ながら.*は、最初に一致しているので、それ以上のテストケースについて0,0,3,1の代わり50,10,123,1になります。

私は過去にほとんど使用していませんでしたが、私は後ろのものなどを使用する必要があると感じています。私はそれを自分の問題に適用する方法がわかりません。

+2

'を参照して、正規表現のすべての末尾の数字と一致します

\d+$ 

を使用することができます(。*?)(\ D +)$' [リンク](https://でregex101 .com/r/2pkcev/1) – Gurman

+0

基本的に、文字列の末尾の数字を '[0-9] + $'パターンとマッチさせることができます。なぜあなたは 'replaceAll'を使いたいのですか?編集:文字列の終わりに到達するには 'str.replaceFirst("(?s)(?:。* \\ D)?(\\ d +)$ "、" $ 1 ")'文字列の改行。しかし、それは扱いにくいですか? –

+0

@Gurmanありがとうございます!str.replaceAll( "。*?(\\ d +)$"、 "$ 1") 'は働いていました。 –

答えて

1

あなたはregex101 demo

+1

私はそれを知っています..しかし、私は 'replaceAll'を使って他のものをすべて削除します..(タイトルの代わりに質問の説明を読んだことはありますか?) –

+0

どうしてあなたはすべて置き換えを使いたいのですか? – marvel308

+0

私は個人的には、Matcher反復でPattern.compileより読みやすく短く思っています。私は推測する..まだ答えてくれてありがとうが、私はすでに '\\ d + $'が何をしているのか分かっていた。 –

関連する問題