我看过其他问题,但他们没有让我得到答案。
我有这个代码:
Pattern p = Pattern.compile("exp_(\\d{1}-\\d)-(\\d+)");
我要匹配的字符串是:exp_5-22-718
我想提取5-22
和718
. 我不太确定为什么它不起作用我错过了什么?非常感谢
如果字符串总是以exp_
我不会使用正则表达式作为前缀。
我会:
replaceFirst()
exp_
split()
结果字符串-
注意:此答案基于假设。如果您有多个连字符,我将其提供为更强大的功能。但是,如果您需要验证数字的格式,那么正则表达式可能会更好。
试试这个:
Pattern p = Pattern.compile("exp_(\\d-\\d+)-(\\d+)");
在您的原始模式中,您指定第二个数字应该只包含一个数字,所以我\d+
尽可能多地匹配。我也{1}
从第一个数字定义中删除了,因为它没有为正则表达式增加价值。
在您的正则表达式中,您错过了第二个数字所需的量词\\d
。这个量词是+
or {2}
。
String yourString = "exp_5-22-718";
Matcher matcher = Pattern.compile("exp_(\\d-\\d+)-(\\d+)").matcher(yourString);
if (matcher.find()) {
System.out.println(matcher.group(1)); //prints 5-22
System.out.println(matcher.group(2)); //prints 718
}
您可以使用 string.split 方法来执行此操作。检查以下代码。我假设您的字符串以“exp_”开头。
String str = "exp_5-22-718";
if (str.contains("-")){
String newStr = str.substring(4, str.length());
String[] strings = newStr.split("-");
for (String string : strings) {
System.out.println(string);
}
}