Java Regex将替换除尾随数字以外的所有内容

Java Regex将替换除尾随数字以外的所有内容,java,regex,string,digits,replaceall,Java,Regex,String,Digits,Replaceall,这应该是非常直截了当的,但我无法找到答案,也无法想出它。我有一个字符串,它总是有一个或多个尾随数字,可能还有其他数字。我想删除字符串中除所有尾随数字之外的所有内容 一些示例测试用例: "1 test50" -> "50" "anothertest10" -> "10" "can contain spaces123" -> "123" "ok1" -> "1" 我尝试了最明显的方

这应该是非常直截了当的,但我无法找到答案,也无法想出它。我有一个字符串,它总是有一个或多个尾随数字,可能还有其他数字。我想删除字符串中除所有尾随数字之外的所有内容

一些示例测试用例:

"1 test50"               ->  "50"
"anothertest10"          ->  "10"
"can contain spaces123"  ->  "123"
"ok1"                    ->  "1"
我尝试了最明显的方法:
str.replaceAll(“.*(\\d)+$”,“$1”)
,但不幸的是,
*
首先匹配,因此对于上面的测试用例,它将导致
0,0,3,1
而不是
50,10123,1

我觉得我需要使用look back之类的工具,尽管我过去很少使用它们,我不知道如何将其应用于我的问题。

你可以使用正则表达式

\d+$

将匹配所有尾随数字,请参见

我知道。。但是如何使用
replaceAll
删除所有其他内容呢。。(你读过问题描述而不是标题吗?)为什么要使用replace呢?我个人认为它比Pattern.compilewithmatcher迭代更容易阅读和简短。我想。。仍然感谢您的回答,但我已经知道
\\d+$
的作用。
(.*)(\d+$
基本上,您可以将字符串末尾的数字与
[0-9]+$
模式匹配。为什么要使用
replaceAll
?编辑:您最好使用
str.replaceFirst((?s)(?:.*\\D)?(\\D+$,“$1”)
更快地到达字符串的末尾,并支持字符串中的换行符。但它看起来不是很笨重吗?@Gurman谢谢你<代码>str.replaceAll(“.*”(\\d+)$,“$1”)工作正常。