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就是我要达到的效果。
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 正则获取 第一个匹配的主要内容,如果未能解决你的问题,请参考以下文章