String s2 = "K000";
Pattern p2 = Pattern.compile("/^.*([A-Z])/");
Matcher m2 = p2.matcher(s2);
if (m2.find()) {
int pos2 = m2.end();
a2 = s2.substring(0,pos2);
n2 = s2.substring(pos2);
}
我希望a2被赋值为“K”而n2被赋值为“000”,但m2.find()从不求值为true,因此从不处理条件语句。我在一个在线正则表达式测试器上仔细检查了我的正则表达式模式,对于这个字符串和这个模式,它返回K作为匹配。知道我在这里做错了吗?
最终,我需要发生的是能够从头开始将s2一直分配到找到a2的最后一个capitol alpha以及在最后一个capitol alpha到n2之后出现的任何小写,数字,特殊字符。
非常感谢任何帮助。
答案 0 :(得分:1)
/
是Javascript正则表达式分隔符,您不能在Java中使用它们。您可能使用过Javascript正则表达式测试程序。
public static void main(String[] args) {
String s2 = "K000";
String a2 = "";
String n2 = "";
Pattern p2 = Pattern.compile("^.*([A-Z])");
Matcher m2 = p2.matcher(s2);
if (m2.find()) {
int pos2 = m2.end();
a2 = s2.substring(0, pos2);
n2 = s2.substring(pos2);
}
System.out.println(a2); // K
System.out.println(n2); // 000
}
请注意,您还可以使用其他模式,这看起来更简单(并让匹配器为您完成工作)。
public static void main(String[] args) {
String s2 = "K000";
String a2 = "";
String n2 = "";
Pattern p2 = Pattern.compile("([A-Z]+)(.+)");
Matcher m2 = p2.matcher(s2);
if (m2.matches()) {
a2 = m2.group(1);
n2 = m2.group(2);
}
System.out.println(a2); // K
System.out.println(n2); // 000
}
(如果您不想要至少一个字符,请+
替换*
答案 1 :(得分:0)
只需从正则表达式中移除^.*([A-Z])
即可。
因此,您的最终正则表达式将为Pattern
,并且Pattern p2 = Pattern.compile("^.*([A-Z])");
对象将按如下方式创建:
{{1}}
这将为您提供所需的结果。