我需要通过正则表达式将字符串拆分为部分。
字符串为:AA2 DE3
或AA2
,我需要2
。
String code = "AA2 DE3";
String[] parts = code.split("^(AA(\\d)+){1}( )?(\\w*)?$");
此处parts
的长度为0。
我试过了
String[] parts = code.split("^((AA){1}(\\d)+){1}( )?(\\w*)?$");
但也是0。
看起来像是错误的正则表达式。虽然它在PHP中运行良好。
修改
事实上,我需要在" AA"之后得到这个数字。但在它之后可能还有其他的词。
答案 0 :(得分:0)
使用String.split
,正则表达式指定了各部分之间的内容。在你的情况下,你的正则表达式匹配整个字符串,所以没有别的,因此它什么都不返回。
如果您想匹配此正则表达式,请使用:
Pattern pattern = Pattern.compile("^(AA(\\d)+){1}( )?(\\w*)?$");
Matcher matcher = pattern.matcher(code);
if(!matcher.matches()) {
// the string doesn't match your regex; handle this
} else {
String part1 = matcher.group(1);
String part2 = matcher.group(2);
// repeat the above line similarly for the third and forth groups
// do something with part1/part2/...
}
答案 1 :(得分:0)
如果您希望String#split()
为您处理模式/匹配器,您可以使用:
String[] inputs = { "AA2 DE3", "AA3", "BB45 FG6", "XYZ321" };
try {
for (String input : inputs) {
System.out.println(
input.split(" ")[0].split("(?=\\d+$)", 2)[1]
);
}
} catch (ArrayIndexOutOfBoundsException e) {
System.err.println("Input format is incorrect.");
}
}
输出:
2
3
45
321
如果保证输入以AA
开头,您也可以使用
System.out.println(
input.split(" ")[0].split("(?<=^AA)")[1]
);
答案 2 :(得分:0)
为此,最好使用Pattern
和Matcher
API。
如果您必须仅使用String#split
,这纯粹来自学术目的。您可以将此基于lookbehind的正则表达式用于split
:
(?<=AA\\d{1,999}) *
<强>代码:强>
String[] toks = "AA2 DE3".split( "(?<=AA\\d{1,999}) *" ); // [AA2, DE3]
OR
String[] toks = "AA2".split( "(?<=AA\\d{1,999}) *" ); // [AA2]
答案 3 :(得分:0)
假设您只想提取数字而不关心其余部分:
Pattern pattern = Pattern.compile("^AA(\\d+)");
Matcher matcher = pattern.matcher(code);
String id = null;
if (matcher.find()) {
id = matcher.group(1);
}
请注意,我将(\d)+
重写为(\d+)
以捕获所有数字。如果有多个数字,则正则表达式仅捕获最后一位数字。
如果您想继续验证:
Pattern pattern = Pattern.compile("^AA(\\d+) ?\\w*$");