获取括号内的参数并将其添加到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获取了内括号中的参数,并将它们添加到一个数组中。但我被打动的部分是获取论点。