Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取括号内的参数并将其添加到Java中的列表中_Java_Regex - Fatal编程技术网

获取括号内的参数并将其添加到Java中的列表中

获取括号内的参数并将其添加到Java中的列表中,java,regex,Java,Regex,输入: 预期产出: (cl(A, B, 0.620) :- /* #pos=1,513 * 代码(尝试1): 输出: Matcher m2 = Pattern.compile("\\((.*?)\\)").matcher(inputString); while(m2.find()) { System.out.println(m2.group(1)); } 代码尝试2:

输入:

预期产出:

(cl(A, B, 0.620) :-  /* #pos=1,513 *
代码(尝试1):

输出:

Matcher m2 = Pattern.compile("\\((.*?)\\)").matcher(inputString);
            while(m2.find()) 
                {
                System.out.println(m2.group(1));
                }
代码尝试2:

cl(A, B, 0.620
仍然得到相同的输出


请告诉我错误是什么。

您当前尝试的主要问题是您的模式错误:

System.out.println(inputString.substring(inputString.indexOf("(")+1,inputString.indexOf(")")));
这与一个左括号匹配,后跟一个右括号。请注意,模式中的捕获组不计算在内;那些括号不匹配。相反,请使用以下模式:

\\((.*?)\\)
完整代码:

\\(.*?\\((.*?)\\)
String inputString = "(cl(A, B, 0.620) :-  /* #pos=1,513 *";
List<String> list = new ArrayList<>();
Matcher m2 = Pattern.compile("\\(.*?\\((.*?)\\)").matcher(inputString);
if (m2.find()) {
    String match = m2.group(1);
    String[] parts = match.split(",\\s+");
    for (String part : parts) {
        list.add(part);
        System.out.println("Found an item: " + part);
    }
}
此处演示:

\\(.*?\\((.*?)\\)
String inputString = "(cl(A, B, 0.620) :-  /* #pos=1,513 *";
List<String> list = new ArrayList<>();
Matcher m2 = Pattern.compile("\\(.*?\\((.*?)\\)").matcher(inputString);
if (m2.find()) {
    String match = m2.group(1);
    String[] parts = match.split(",\\s+");
    for (String part : parts) {
        list.add(part);
        System.out.println("Found an item: " + part);
    }
}

当前尝试的主要问题是模式错误:

System.out.println(inputString.substring(inputString.indexOf("(")+1,inputString.indexOf(")")));
这与一个左括号匹配,后跟一个右括号。请注意,模式中的捕获组不计算在内;那些括号不匹配。相反,请使用以下模式:

\\((.*?)\\)
完整代码:

\\(.*?\\((.*?)\\)
String inputString = "(cl(A, B, 0.620) :-  /* #pos=1,513 *";
List<String> list = new ArrayList<>();
Matcher m2 = Pattern.compile("\\(.*?\\((.*?)\\)").matcher(inputString);
if (m2.find()) {
    String match = m2.group(1);
    String[] parts = match.split(",\\s+");
    for (String part : parts) {
        list.add(part);
        System.out.println("Found an item: " + part);
    }
}
此处演示:

\\(.*?\\((.*?)\\)
String inputString = "(cl(A, B, 0.620) :-  /* #pos=1,513 *";
List<String> list = new ArrayList<>();
Matcher m2 = Pattern.compile("\\(.*?\\((.*?)\\)").matcher(inputString);
if (m2.find()) {
    String match = m2.group(1);
    String[] parts = match.split(",\\s+");
    for (String part : parts) {
        list.add(part);
        System.out.println("Found an item: " + part);
    }
}

您能解释一下吗?您正在从遇到的第一个开括号到第一个闭括号进行匹配-您(似乎)想要的内容需要对字符串进行实际解析,以匹配开头和结尾parentheses@MaulikDoshi用例是获取论文中的参数。您期望的输出是什么?你从没告诉过我们这些。顺便说一下,如果你的表达式比这个复杂得多,比如嵌套括号,那么你可能需要考虑编写一个解析器。@ TimiGeEeleSeEN获取了内括号中的参数,并将它们添加到一个数组中。但让我吃惊的是获取参数。你能再解释一下吗?你正在匹配从你遇到的第一个开括号到第一个闭括号-你(似乎)所做的want需要对字符串进行实际解析,以匹配开头和结尾parentheses@MaulikDoshi用例是获取论文中的参数。您期望的输出是什么?你从没告诉过我们这些。顺便说一下,如果你的表达式比这个复杂得多,比如嵌套括号,那么你可能需要考虑编写一个解析器。@ TimiGeEeleSeEN获取了内括号中的参数,并将它们添加到一个数组中。但我被打动的部分是获取论点。