3 回答
TA贡献1719条经验 获得超6个赞
你可以使用这个正则表达式来分割你想要的方式,
(?<=[A-Z])(?=\d+$)
这里(?<=[A-Z])正向后视标记第一个字母表(?=\d+$)的开始,并将连续数字的开始标记到字符串的结尾,从而为您提供您正在寻找的字符串内的点。只需拆分该点即可为您提供所需的输出。
Java代码,
String s = "MH12PE1433";
System.out.println(Arrays.toString(s.split("(?<=[A-Z])(?=\\d+$)")));
印刷,
[MH12PE, 1433]
你也可以在这里玩演示
此外,如果您有任何非字母字符串,而不仅仅是字符串末尾的数字,您可以更普遍地使用此正则表达式,它将您的文本与最后一个字母表分开(正如您所说的字符串末尾的第一个字母表)。
(?<=[A-Za-z])(?=[^A-Za-z]*$)
Java代码,
List<String> list = Arrays.asList("MH12PE1433","MH12PE@@1123", "MH12PE@@##$$", "MH12Pe5555");
list.forEach(x -> System.out.println(x + " --> " + Arrays.toString(x.split("(?<=[A-Za-z])(?=[^A-Za-z]*$)"))));
印刷,
MH12PE1433 --> [MH12PE, 1433]
MH12PE@@1123 --> [MH12PE, @@1123]
MH12PE@@##$$ --> [MH12PE, @@##$$]
MH12Pe5555 --> [MH12Pe, 5555]
TA贡献2037条经验 获得超6个赞
您可以尝试以下操作:使用以下代码从末尾替换所有数字以获取较早的字符串。湾。将派生的字符串从原始字符串替换为最后的数字。
String no="MH12PE1433";
String regex="[0-9]+$";//all ending digits
String prefix = no.replaceFirst(regex, "");//MH12PE
String suffix = no.replaceFirst(prefix, "");//1433
TA贡献1815条经验 获得超13个赞
您可以通过在正则表达式[0-9]+末尾添加 a 来使用匹配字符串末尾数字$的正则表达式。
private static final Pattern pattern = Pattern.compile("([0-9]+)$");
private String extractTrailingDigits(String s) {
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
return matcher.group(1);
} else {
return "";
}
}
private void test() {
String[] tests = {"MH12PE1433", "MH12PE1433000"};
for (String test : tests) {
System.out.println(test + " -> " + extractTrailingDigits(test));
}
}
添加回答
举报