Java 正则表达式:提取函数名称
Java regex: extract function names
我正在尝试从公式中提取函数名称列表,但我的正则表达式不起作用。
给定 ( aaa(111) + bbb(222) ) / ccc ( 333 )
我需要获取包含 aaa
、bbb
和 ccc
的字符串数组。相反,我得到 aaa(
、bbb(
和 ccc (
。如何进行这项工作?
这是我的尝试:
String formula = "( aaa(111) + bbb(222) ) / ccc ( 333 )";
Pattern pattern = Pattern.compile("((\w+)\s*\()");
Matcher matcher = pattern.matcher(formula);
while(matcher.find()){
System.out.println(matcher.group(1));
}
你有嵌套的捕获组,让第一个成为非捕获组:
Pattern pattern = Pattern.compile("(?:(\w+)\s*\()");
或者如 Didier L 所指出的,只需删除外部组:
Pattern pattern = Pattern.compile("((\w+)\s*\(");
您的模式中有 2 个捕获组:
- 外括号
\w+
身边的人
既然你只对第二个感兴趣,你应该
- 拿第二组:
matcher.group(2)
去掉外括号:
Pattern pattern = Pattern.compile("(\w+)\s*\(");
请注意 matcher.group(0)
始终是整个模式的匹配项(因此相当于此处的外部括号)
我正在尝试从公式中提取函数名称列表,但我的正则表达式不起作用。
给定 ( aaa(111) + bbb(222) ) / ccc ( 333 )
我需要获取包含 aaa
、bbb
和 ccc
的字符串数组。相反,我得到 aaa(
、bbb(
和 ccc (
。如何进行这项工作?
这是我的尝试:
String formula = "( aaa(111) + bbb(222) ) / ccc ( 333 )";
Pattern pattern = Pattern.compile("((\w+)\s*\()");
Matcher matcher = pattern.matcher(formula);
while(matcher.find()){
System.out.println(matcher.group(1));
}
你有嵌套的捕获组,让第一个成为非捕获组:
Pattern pattern = Pattern.compile("(?:(\w+)\s*\()");
或者如 Didier L 所指出的,只需删除外部组:
Pattern pattern = Pattern.compile("((\w+)\s*\(");
您的模式中有 2 个捕获组:
- 外括号
\w+
身边的人
既然你只对第二个感兴趣,你应该
- 拿第二组:
matcher.group(2)
去掉外括号:
Pattern pattern = Pattern.compile("(\w+)\s*\(");
请注意 matcher.group(0)
始终是整个模式的匹配项(因此相当于此处的外部括号)