正则表达式匹配但从结果中排除

时间:2016-09-01 11:13:25

标签: java regex

嗨,我在日志文件中有以下文字

projectId:1 name:John
projectId:63232 name:Sam
telno:0232453242323

正则表达式只应返回

1
63232

目前我已经获得了以下正则表达式projectId:\ d *,它与“projectId:'”不匹配。我如何从最终比赛中省略?

使用java中提供的解决方案

    String term = "ProjectId:11414084 Title:Recherche partenariat";
    String regex = "(?<=ProjectId:)\\d*";

    Pattern r = Pattern.compile(regex);
    Matcher m = r.matcher(term);
    m.matches();
    m.group();

以下抛出异常

Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:536)
at java.util.regex.Matcher.group(Matcher.java:496)

3 个答案:

答案 0 :(得分:1)

只需使用第一次匹配时不返回的全局标识符。

根据您使用的编程语言,有不同的方法可以使用全局标志。如果您告诉我们有关用法的更多信息,我可以为您提供有关如何使用的更多信息。

我看到你更新了你的问题。

仅检索号码时请使用正面的后视镜:

(?<=projectId:)\d*

Here a regex101 example

答案 1 :(得分:1)

使用lookbehind

(?<=projectId:)\d+

前瞻和后视让您有条件地匹配项目而不会成为比赛的一部分。

Demo.

答案 2 :(得分:0)

您可以使用一对未转义的括号捕获某些特定部分,而不是从匹配中排除任何内容:

\bprojectId:(\d*)
            ^   ^

或 - 如果必须至少有一位数字:

\bprojectId:(\d+)
               ^

现在,您需要的值在第1组中。请参阅the regex demo

注意我添加了\b这是一个单词边界,nonproject:234现在不会匹配。

请在此处查看more about capturing groups