我有一个像MH12PE1433这样的字符串我试图找到一个正则表达式,将它从我得到第一个字符的末尾分割出来,例如.
String str1=1433;
String str2=MH12PE;
Run Code Online (Sandbox Code Playgroud)
我可以使用分割最后4位数
String no=MH12PE1433;
if (no.length() > 3) {
text2 = no.substring(no.length() - 4);
}
Run Code Online (Sandbox Code Playgroud)
但是想要使用找到第一个字母的正则表达式进行拆分.我希望你理解我的问题谢谢
您可以使用此正则表达式来分割您想要的方式,
(?<=[A-Z])(?=\d+$)
Run Code Online (Sandbox Code Playgroud)
在这里,(?<=[A-Z])正向后方标记了第一个字母的开头,并(?=\d+$)标记了连续数字的开始直到字符串的结尾,因此为您提供了您正在寻找的字符串内的点.只需拆分该点就可以获得所需的输出.
Java代码,
String s = "MH12PE1433";
System.out.println(Arrays.toString(s.split("(?<=[A-Z])(?=\\d+$)")));
Run Code Online (Sandbox Code Playgroud)
打印,
[MH12PE, 1433]
Run Code Online (Sandbox Code Playgroud)
你也可以在这里玩这个演示
此外,如果您有任何非字母字符串而不仅仅是字符串末尾的数字,您可以更普遍地使用此正则表达式,这将从最后一个字母表中分割您的文本(正如您从字符串末尾说的第一个字母表).
(?<=[A-Za-z])(?=[^A-Za-z]*$)
Run Code Online (Sandbox Code Playgroud)
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]*$)"))));
Run Code Online (Sandbox Code Playgroud)
打印,
MH12PE1433 --> [MH12PE, 1433]
MH12PE@@1123 --> [MH12PE, @@1123]
MH12PE@@##$$ --> [MH12PE, @@##$$]
MH12Pe5555 --> [MH12Pe, 5555]
Run Code Online (Sandbox Code Playgroud)