猿问

如何从Java中找到第一个字符的反向拆分字符串?

我有一个像 MH12PE1433 这样的字符串我正在尝试找到一个正则表达式来将它从我得到第一个字符的末尾拆分出来,例如。


String str1=1433;

String str2=MH12PE;

我可以通过使用拆分最后 4 位数字


String no=MH12PE1433;

if (no.length() > 3) {

                        text2 = no.substring(no.length() - 4);

}

但想在找到第一个字母的地方使用正则表达式进行拆分。我希望你能理解我的问题谢谢


四季花海
浏览 99回答 3
3回答

慕侠2389804

你可以使用这个正则表达式来分割你想要的方式,(?<=[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]

阿晨1998

您可以尝试以下操作:使用以下代码从末尾替换所有数字以获取较早的字符串。湾。将派生的字符串从原始字符串替换为最后的数字。String no="MH12PE1433";&nbsp; &nbsp; String regex="[0-9]+$";//all ending digits&nbsp; &nbsp; String prefix = no.replaceFirst(regex, "");//MH12PE&nbsp; &nbsp; String suffix = no.replaceFirst(prefix, "");//1433

萧十郎

您可以通过在正则表达式[0-9]+末尾添加 a 来使用匹配字符串末尾数字$的正则表达式。private static final Pattern pattern = Pattern.compile("([0-9]+)$");private String extractTrailingDigits(String s) {&nbsp; &nbsp; Matcher matcher = pattern.matcher(s);&nbsp; &nbsp; if (matcher.find()) {&nbsp; &nbsp; &nbsp; &nbsp; return matcher.group(1);&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; return "";&nbsp; &nbsp; }}private void test() {&nbsp; &nbsp; String[] tests = {"MH12PE1433", "MH12PE1433000"};&nbsp; &nbsp; for (String test : tests) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(test + " -> " + extractTrailingDigits(test));&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Java
我要回答