嗨,我在日志文件中有以下文字
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)
答案 0 :(得分:1)
只需使用第一次匹配时不返回的全局标识符。
根据您使用的编程语言,有不同的方法可以使用全局标志。如果您告诉我们有关用法的更多信息,我可以为您提供有关如何使用的更多信息。
我看到你更新了你的问题。
仅检索号码时请使用正面的后视镜:
(?<=projectId:)\d*
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以使用一对未转义的括号捕获某些特定部分,而不是从匹配中排除任何内容:
\bprojectId:(\d*)
^ ^
或 - 如果必须至少有一位数字:
\bprojectId:(\d+)
^
现在,您需要的值在第1组中。请参阅the regex demo。
注意我添加了\b
这是一个单词边界,nonproject:234
现在不会匹配。
请在此处查看more about capturing groups。