正则表达式java一个正则表达式提取字符串,除了最后一个数字

时间:2018-06-01 09:18:16

标签: java regex string

如何从Java中提取没有最后一个数字(如果存在)的字符串中的所有字符,我发现如何使用此正则表达式[0-9.]+$提取字符串中的最后一个数字,但我想要相反。

示例:

abd_12df1231 => abd_12df

abcd => abcd

abcd12a => abcd12a

abcd12a1 => abcd12a

3 个答案:

答案 0 :(得分:4)

您可能会做的是从字符串^开头匹配一个或多个单词字符\w+,后跟不是使用\D的数字

^\w+\D

根据评论中的建议,您可以使用字符类^[\w-]+\D展开要匹配的字符,或者如果要匹配任何字符,可以使用点^.+\D

答案 1 :(得分:3)

如果要删除字符串末尾的一个或多个数字,可以使用

s = s.replaceFirst("[0-9]+$", ""); 

请参阅regex demo

要删除浮动,请使用

s = s.replaceFirst("[0-9]*\\.?[0-9]+$", ""); 

请参阅another regex demo

<强>详情

  • (?s) - Pattern.DOTALL内联修饰符
  • ^ - 字符串开头
  • (.*?) - 捕获组#1:除了换行符之外的任何0 +字符尽可能少
  • \\d*\\.?\\d+ - 整数或浮点值
  • $ - 字符串结束。

Java demo

List<String> strs = Arrays.asList("abd_12df1231", "abcd", "abcd12a", "abcd12a1", "abcd12a1.34567");
for (String str : strs)
    System.out.println(str + " => \"" + str.replaceFirst("[0-9]*\\.?[0-9]+$", "") + "\"");

输出:

abd_12df1231 => "abd_12df"
abcd => "abcd"
abcd12a => "abcd12a"
abcd12a1 => "abcd12a"
abcd12a1.34567 => "abcd12a"

要实际匹配从开始到最后一个数字的子字符串,您可以使用

(?s)^(.*?)\d*\.?\d+$

请参阅regex demo

Java代码:

String s = "abc234 def1.566";
Pattern pattern = Pattern.compile("(?s)^(.*?)\\d*\\.?\\d+$");
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
    System.out.println(matcher.group(1)); 
} 

答案 2 :(得分:0)

使用此正则表达式,您可以捕获最后一位数

\d+$

您可以保存该数字并执行string.replace(lastDigit,"");