使用正则表达式从字符串中提取文本

时间:2017-08-15 16:43:38

标签: java regex

我想从以下字符串中提取 acquireTest 括号内的值:

format.getControl(val.acquireTest(xyzTest));

上面应该返回: xyzTest

值始终位于 acquireTest 之后,并且始终位于括号中。

更多例子:

key.setUp(value.acquireTest(abcTest));

以上示例应返回: abcTest

app.getMax((Integer.parseInt(va.acquireTest(getValue))));

以上示例应返回: getValue

我尝试过以下正则表达式:

\.acquireTest\((.*?)\)

然而,它并没有给我我想要的确切价值。

任何帮助都深深体会到它!

4 个答案:

答案 0 :(得分:1)

你可以使用

final String regex = "acquireTest\\((\\w*)";
final String string = "format.getControl(val.acquireTest(xyzTest));\n"
     + "key.setUp(value.acquireTest(abcTest));\n"
     + "app.getMax((Integer.parseInt(va.acquireTest(getValue))));";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(1));

}

查看online compiler

上的演示

答案 1 :(得分:1)

如果我理解得很好,你想提取

(val.acquireTest(xyzTest)) from

format.getControl(val.acquireTest(xyzTest));

如果这是真的,你应该做

\(.*\.acquireTest\(.*\)\)

告诉我你得到了什么以及它对你来说是否合适。

干杯 托马斯

答案 2 :(得分:1)

您可以尝试以下

        List<String> matchList = new ArrayList<String>();
        Pattern regex = Pattern.compile("acquireTest\\((.*?)\\)");
        Matcher regexMatcher = regex.matcher("format.getControl(val.acquireTest(xyzTest));\\n");

        while (regexMatcher.find()) {
           matchList.add(regexMatcher.group(1));
        }

        for(String str:matchList) {
           System.out.println(str);
        }

答案 3 :(得分:1)

        Pattern pattern = Pattern.compile("acquireTest\\((\\w+)\\)");
    Matcher matcher = pattern.matcher("app.getMax((Integer.parseInt(va.acquireTest(getValue))));");
    if (matcher.find()){
        System.out.println(matcher.group(1));
    }

这适合你吗?