什么是正则表达式,所以我只能在字符串的末尾保留LAST数字? 例如
Test123 -> 123
T34est56 -> 56
123Test89 -> 89
谢谢
我尝试过
str.replaceAll("[^A-Za-z\\s]", "");
,但这会删除字符串的所有数字。
我也尝试过str.replaceAll("\\d*$", "");
,但这会返回以下内容:
Test123 -> Test
T34est56 -> T34est
123Test89 -> 123Test
我要相反。
答案 0 :(得分:2)
获取行中最后一个整数的组,然后用该组替换字符串似乎可行:
String str = "123Test89";
String result = str.replaceAll(".*[^\\d](\\d+$)", "$1");
System.out.println(result);
这将输出:
89
答案 1 :(得分:0)
您可以使用replaceFirst()
删除所有内容(.*
),直到最后一个非数字(\\D
):
s = s.replaceFirst(".*\\D", "");
完整示例:
public class C {
public static void main(String args[]) {
String s = "T34est56";
s = s.replaceFirst(".*\\D", "");
System.out.println(s); // 56
}
}
答案 2 :(得分:0)
我喜欢使用Pattern
和Matcher
API:
Pattern pattern = Pattern.compile("[1-9]*$");
Matcher matcher = pattern.matcher("Test123");
if (matcher.find()) {
System.out.println(matcher.group()); // 123
}
答案 3 :(得分:0)
您可以使用这样的正则表达式:
String result = str.replaceFirst(".*?(\\d+$)", "$1");
说明:
.*
:任意数量的前导字符?
:(可选)。这可以确保其后的正则表达式部分((\\d+$)
的优先级高于.*
。如果没有?
,则每个测试用例将仅返回最后一位数字(即123Test89
将返回9
而不是89
)。\\d+
:一位或多位数字$
:位于字符串的结尾(...)
:在捕获组中捕获然后替换为:
$1
:第一个捕获组的匹配项(即尾随数字)为了更清楚一点,您可以在正则表达式中添加前导^
:"^.*?(\\d+$)"
,尽管实际上并没有必要,因为.*
已经匹配了每个前导字符。
答案 4 :(得分:-3)
我认为使用/.*?(\d+)$/,它将起作用。