我试图制作一个会产生以下结果的正则表达式:
7.0 + 5 - :asc + (8.256 - :b)^2 + :d/3
: 7.0 , 5 ,:asc , 8.256 , :b , 2 ,:d , 3 -+*-/^^ )ç@
:nothing 它应该首先匹配可以浮动的数字,所以在我的正则表达式中我有:[0-9]+(\\.[0-9])?
但它也应该是特殊情况,例如:a 或 ::ABC
更确切地说,它应该(如果可能)匹配除数学运算符 / * + ^ - 和括号之外的任何内容。
所以这是我的最终正则表达式:([0-9]+(\\.[0-9])?)|(:[a-zA-Z]+)
但它无效,因为matcher.groupCount()
为我给出的两个示例都返回 3 。
答案 0 :(得分:3)
群组是您在正则表达式中专门分组的内容。括号中包围的任何东西都是一个组。 (Hello) World
有一个小组,Hello
。你需要做的是找到所有的比赛。
在您的代码([0-9]+(\\.[0-9])?)|(:[a-zA-Z]+)
中,可以看到3组括号。这就是为什么每场比赛总会给你3组。
您的代码可以正常工作,这是一个示例:
String text = "7.0 + 5 - :asc + (8.256 - :b)^2 + :d/3";
Pattern p = Pattern.compile("([0-9]+(\\.[0-9]+)?)|(:[a-zA-Z]+)");
Matcher m = p.matcher(text);
List<String> matches = new ArrayList<String>();
while (m.find()) matches.add(m.group());
for (String match : matches) System.out.println(match);
ArrayList matches
将包含正则表达式找到的所有匹配项。
我做的唯一更改是在第二个+
之后添加[0-9]
。
这是输出:
7.0 5 :asc 8.256 :b 2 :d 3
Here是关于java中groups
的更多信息。
这有帮助吗?
答案 1 :(得分:0)
([^\()+\-*\s])+ //put any mathematical operator inside square bracket
答案 2 :(得分:0)
您的正则表达式是正确的,请运行以下代码:
String input = "7.0 + 5 - :asc + (8.256 - :b)^2 + :d/3"; // your input
String regex = "(\\d+(\\.\\d+)?)|(:[a-z-A-Z]+)"; // exactly yours.
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
您的问题是对方法matcher.groupCount()
的理解。 JavaDoc清楚地说
返回此匹配器模式中的捕获组数。