什么是正则表达式来捕获init字符串直到结束字的值?

时间:2016-09-19 21:26:18

标签: java regex

我的参赛作品:

String e1 = "MyString=1234 MyString=5678";
String e2 = "MyString=1234\nMyString=5678";

我在做什么:

String pattern = "MyString=(.*)";
Pattern patternObj = Pattern.compile(pattern);
Matcher matcher = patternObj.matcher(e1);  //e1 or e2
if (matcher.find()) {
    System.out.println("G1: " + matcher.group(1));
    System.out.println("G2: " + matcher.group(2));
}

我想要的输出:

G1: 1234
G2: 5678

3 个答案:

答案 0 :(得分:2)

只有一个组会多次匹配。你必须保持匹配和打印组1:

int i = 0;
while (matcher.find()) {
    System.out.println("G" + (++i) + ": " + matcher.group(1));
}

此外,您需要更新模式,使其与下一个MyString不匹配。您可以使用\d+\w+[^\s]+,具体取决于您匹配的值的类型。

答案 1 :(得分:1)

如果它始终是数字,您可以将其用作正则表达式:

String pattern = "MyString=([0-9]*)";

如果它包含字母和数字,Wiktor Stribizew的评论在原帖中非常有用。他说使用\ w匹配单词字符。

答案 2 :(得分:1)

最简单的“快速修复”是用.(字母,数字或下划线)替换\w(任何字符,但换行符):

String pattern = "MyString=(\\w*)"; // <---- HERE
Pattern patternObj = Pattern.compile(pattern);
Matcher matcher = patternObj.matcher(e1); 
if (matcher.find()) {
    System.out.println("G1: " + matcher.group(1));
    System.out.println("G2: " + matcher.group(2));
}

现在,MyString=(\\w*)匹配MyString=子字符串,并在匹配任何空格,标点符号和其他非字符串后匹配并捕获任何0个或多个字母,数字或下划线-word chars。

注意:如果您需要匹配任何字符但空格,则可以使用\S代替\w