正则表达式在特定字符串行中查找整数

时间:2015-05-22 13:38:10

标签: java regex string

我有这个正则表达式来查找字符串中的整数(换行符)。但是,我想要过滤掉这个。我希望正则表达式找到某些行中的数字,而不是其他行。

字符串:

 String test= "ytrt.ytrwyt.ytreytre.test1,0,2,0"
+"sfgtr.ytyer.qdfre.uyeyrt.test2,0,8,0"
+"sfgtr.ytyer.qdfre.uyeyrt.test3,0,3,0";



pattern = "(?<=,)\\d+";

    pr = Pattern.compile(pattern);

    match = pr.matcher(test);
    System.out.println();
    if (match.find()) {


        System.out.println("Found: " + match.group());

    }

这个正则表达式在逗号后面找到所有行的整数。如果我想要一个特定的正则表达式来找到包含&#34; test1&#34;,&#34; test2&#34;和&#34; test3&#34;的行中的整数。我该怎么做?我想创建三个不同的正则表达式,但我的正则表达式技能很弱。

第一个正则表达式应该打印出2.第二个8和第三个3.

3 个答案:

答案 0 :(得分:1)

您可以展开自己的模式,将test[123]包含在后备广告中,该广告将与test1test2test3匹配:

String pattern = "(?<=test[123][^,]{0,100},[^,]{1,100},)\\d+";
Pattern pr = Pattern.compile(pattern);
Matcher match = pr.matcher(test);
System.out.println();
while (match.find()) {
    System.out.println("Found: " + match.group());
}

,[^,]部分滑动了testN后面两个逗号之间的所有内容。

我使用{0,100}代替*{1,100}代替+内部表达式,因为Java正则表达式引擎要求lookbehinds具有预定义的限制他们的长度。如果您需要允许跳过超过100个字符,请相应地调整最大长度。

Demo.

答案 1 :(得分:0)

您可以使用以下Pattern并循环:

String test= "ytrt.ytrwyt.ytreytre.test1,0,2,0"
        + System.getProperty("line.separator")
        +"sfgtr.ytyer.qdfre.uyeyrt.test2,0,8,0"
        + System.getProperty("line.separator")
        +"sfgtr.ytyer.qdfre.uyeyrt.test3,0,3,0";
//                          | "test" literal
//                          |    | any number of digits
//                          |    |  | comma
//                          |    |  | any number of digits
//                          |    |  |    | comma
//                          |    |  |    | | group1, your digits
Pattern p = Pattern.compile("test\\d+,\\d+,(\\d+)");
Matcher m = p.matcher(test);
while (m.find()) {
    // prints back-reference to group 1
    System.out.printf("Found: %s%n", m.group(1));
}

<强>输出

Found: 2
Found: 8
Found: 3

答案 2 :(得分:0)

您还可以使用捕获组从字符串中提取测试编号和其他编号:

String pattern = "test([123]),\\d+,(\\d+),";

...

while (match.find()) {
    // get and parse the number after "test" (first capturing group)
    int testNo = Integer.parseInt(match.group(1));
    // get and parse the number you wanted to extract (second capturing group)
    int num = Integer.parseInt(match.group(2));
    System.out.println("test"+testNo+": " + num);
}

打印

test1: 2
test2: 8
test3: 3

注意:在此示例中,解析字符串仅用于演示目的,但如果您想对数字执行某些操作(例如将它们存储在数组中),则可能很有用。

更新:如果您还希望匹配"ytrt.ytrwyt.test1.ytrwyt,0,2,0"等字符串,可以将pattern更改为"test([123])\\D*,\\d+,(\\d+),",以允许任意数量的非数字跟随{ {1}},test1test2(以逗号分隔的整数之前)。