我看过其他问题,但他们没有引导我回答。
我有这段代码:
Pattern p = Pattern.compile("exp_(\\d{1}-\\d)-(\\d+)");
我想要匹配的字符串是:exp_5-22-718
我想提取5-22
和718
。我不太清楚为什么它不起作用我错过了什么?非常感谢
答案 0 :(得分:1)
如果字符串总是以exp_
为前缀,我就不会使用正则表达式。
我会:
replaceFirst()
exp_
split()
-
注意:此答案基于假设。如果你有多个连字符,我会提供更强大的功能。但是,如果您需要验证数字的格式,那么正则表达式可能会更好。
答案 1 :(得分:1)
试试这个:
Pattern p = Pattern.compile("exp_(\\d-\\d+)-(\\d+)");
在您的原始模式中,您指定第二个数字应该只包含一个数字,因此我将\d+
匹配为尽可能多的数字。
我还从第一个数字定义中删除了{1}
,因为它没有为regexp增加值。
答案 2 :(得分:1)
在你的正则表达式中,你错过了第二位\\d
所需的量词。此量词为+
或{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
}
答案 3 :(得分:1)
您可以使用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);
}
}