java 正则获取 第一个匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 正则获取 第一个匹配相关的知识,希望对你有一定的参考价值。

String text="s = (90) e s = (60) e";
Pattern p=Pattern.compile("s.*\\((.*?)\\).*e");
Matcher m=p.matcher(text);
while(m.find())

System.out.println(m.group(1));



现在有两个相同的内容我想保持每次都获取第一个内容该怎么写。
内容:s = (90) e s = (60) e
内容第一个: s = (90) e
内容第二个: s = (60) e
("s.*\\((.*?)\\).*e") 这个能获取什么啊就是获取()里边的内容啊。

每次能获取90就是我要达到的效果。

参考技术A Matcher matcher = p.matcher(test);
while(matcher.find())
result.add(matcher.group());

matcher.find()会匹配第一个结果,后续会从这里继续往后匹配本回答被提问者采纳
参考技术B String text="s = (90) e s = (60) e";
text=text.replaceAll(" ", "");
Pattern p=Pattern.compile("\\\\((.*?)\\\\)");
Matcher m=p.matcher(text);
List<String> list = new ArrayList<String>();
while(m.find())
   list.add(m.group(1));
    
System.err.println(list.get(0));

参考技术C 木有明白你啥意思

如何使用模式匹配器仅获取与 Java 中正则表达式匹配的第一行?

【中文标题】如何使用模式匹配器仅获取与 Java 中正则表达式匹配的第一行?【英文标题】:How to get only the first line matching the regex in Java using Pattern matcher? 【发布时间】:2017-02-04 12:17:07 【问题描述】:

假设我在一个文本文件中有一个足球俱乐部名称列表,每行一个名称。

Arsenal
Manchester United
Chelsea
Liverpool
...
...
Manchester City
Real Madrid

假设我需要找到以“曼彻斯特”开头的行,我有下面的正则表达式。

Pattern clubman = Pattern.compile("Manchester.*");
Matcher matche = clubman.matcher(fileString);
        if (matche.find()) 

            System.out.println("Manchester club is :"
                    + matche.group(0));
        

但是我只需要匹配匹配正则表达式的第一行,即Manchester United。 但是Pattern.compile 正在寻找最后一个匹配项,即Manchester City

如何只获取与正则表达式匹配的第一行?

【问题讨论】:

匹配以字符串开头的行不需要正则表达式。 抱歉,此数据仅供参考。我处理机密数据,所以不能在这里发布。我的基本问题是只获得与模式匹配的第一行而不是最后一行。 无论如何,以字符串开头的匹配行不需要正则表达式。 【参考方案1】:

不要为此使用正则表达式。没有理由这样做,它只会让你的问题变得比它需要的更难。只需遍历文件中的每一行并执行类似的操作

string match = "Manchester";
if (line.length() >= match.length()) 
  if (line.substring(0, match.length()).equals(match)) 
    return line;
  

【讨论】:

抱歉,此数据仅供参考。我处理机密数据,所以不能在这里发布。我的基本问题是只得到与模式匹配的第一行而不是最后一行。 @CS_noob 没关系。我的回答是一样的。遍历每一行,检查是否匹配,如果匹配,则返回该行。如果您必须使用正则表达式来检查匹配项,那就去吧。无论如何,它会具有更好的性能,因为不需要处理整个文件。【参考方案2】:

要检查是否有匹配项,您应该使用 groupCount(). 您正在使用 find() 找到下一个匹配项,因此程序将打印第二个匹配项。

【讨论】:

以上是关于java 正则获取 第一个匹配的主要内容,如果未能解决你的问题,请参考以下文章

如何使用模式匹配器仅获取与 Java 中正则表达式匹配的第一行?

JS中字符串操作,生成随机数,正则表达式

用于第一个匹配字符串的 Java 正则表达式

如何获取与正则表达式匹配的第一行之后的文件部分

C ++正则表达式替换第一个匹配项

jS正则和WEB框架Django的入门