我有一个类似MH12PE1433的字符串,我试图找到一个正则表达式以从例如得到第一个字符的结尾处将其拆分。
String str1=1433;
String str2=MH12PE;
我可以使用
分割后4位数字String no=MH12PE1433;
if (no.length() > 3) {
text2 = no.substring(no.length() - 4);
}
,但要使用找到第一个字母的正则表达式进行拆分。 我希望你能理解我的问题 谢谢
答案 0 :(得分:5)
您可以使用此正则表达式拆分所需的方式,
(?<=[A-Z])(?=\d+$)
在这里(?<=[A-Z])
后面的正向标记表示第一个字母的开始,而(?=\d+$)
则标记连续数字的开头,直到字符串的结尾,因此为您提供了要查找的字符串内的点。只需与该点分开即可为您提供所需的输出。
Java代码
String s = "MH12PE1433";
System.out.println(Arrays.toString(s.split("(?<=[A-Z])(?=\\d+$)")));
打印
[MH12PE, 1433]
您也可以玩演示here
此外,如果您有任何非字母的字符串,而不仅仅是字符串末尾的数字,则可以更普遍地使用此正则表达式,它将您的文本与最后一个字母分开(如您说的是第一个字母从结尾开始)字符串)。
(?<=[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]
答案 1 :(得分:1)
您可以尝试以下操作: 一种。使用以下代码替换末尾的所有数字以获取较早的字符串。 b。替换从原始派生的String到末尾得到数字。
String no="MH12PE1433";
String regex="[0-9]+$";//all ending digits
String prefix = no.replaceFirst(regex, "");//MH12PE
String suffix = no.replaceFirst(prefix, "");//1433
答案 2 :(得分:0)
String YOURstring="MH12PE1433";
String regex="[0-9]+$";
String FIRSTset= YOURstring.replaceFirst(regex, "");
String SECONDset= YOURstring.replaceFirst(FIRSTset, "");
System.out.println(""+FIRSTset);
System.out.println(""+SECONDset);
输出
MH12PE
1433
答案 3 :(得分:0)
通过在正则表达式的末尾添加[0-9]+
,可以使用与字符串末尾的数字$
匹配的正则表达式。
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));
}
}