我的字符串与我的正则表达式不匹配,即使它在regex101上是正确的

时间:2016-04-24 09:58:55

标签: java android regex

我在Android Studio中遇到这个奇怪的问题,我的程序无法通过正则表达式解析我匹配的字符串。

private Pattern myPattern = Pattern.compile("([Request ID:]+)(\\d+)([, BY:]+)(\\d+)([ ])([A-Z\\d ]+)([ ])([amount:]+)(\\d+(\\.\\d{1,2}))");

     msg = "Request ID:22, BY:123414045601 DEALER01 amount:100.00 | Request ID:41, BY:123414012341 DEALER01 amount:100.00 | Request ID:2, BY:123414032110 DEALER MAKER5 amount:500.00";

    String[] items = msg.split("\\|");
    for(int i = 0; i <items.length; i++){

        Matcher match = pendingPattern.matcher(items[i]);
        if (!match.matches()) {

        } else {

            list1.add(match.group(2));
            list2.add(match.group(4));
            list3.add(match.group(9));
        }
    }

我的正则表达式匹配&#34;请求ID:2,BY:123414032110经销商MAKER5金额:500.00&#34;但与其他条目不匹配。我已经在regex101.com上查看了这个,我的所有参赛作品都在那里匹配。

非常感谢您对此的见解。

1 个答案:

答案 0 :(得分:1)

这是因为输入中|之前和之后的空格。

你可以使用String.trim()摆脱它:

Matcher match = pendingPattern.matcher(items[i].trim());

或者不要通过在split中使用此正则表达式让空格出现在拆分数组中:

String[] items = msg.split("\\s*\\|\\s*");