如何从Java中提取没有最后一个数字(如果存在)的字符串中的所有字符,我发现如何使用此正则表达式[0-9.]+$
提取字符串中的最后一个数字,但我想要相反。
示例:
abd_12df1231
=> abd_12df
abcd
=> abcd
abcd12a
=> abcd12a
abcd12a1
=> abcd12a
答案 0 :(得分:4)
您可能会做的是从字符串^
开头匹配一个或多个单词字符\w+
,后跟不是使用\D
的数字
答案 1 :(得分:3)
如果要删除字符串末尾的一个或多个数字,可以使用
s = s.replaceFirst("[0-9]+$", "");
请参阅regex demo
要删除浮动,请使用
s = s.replaceFirst("[0-9]*\\.?[0-9]+$", "");
<强>详情
(?s)
- Pattern.DOTALL
内联修饰符^
- 字符串开头(.*?)
- 捕获组#1:除了换行符之外的任何0 +字符尽可能少\\d*\\.?\\d+
- 整数或浮点值$
- 字符串结束。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,"");