模式匹配数字/运算符

时间:2010-10-25 09:34:53

标签: java regex

嘿,我一直想弄清楚为什么这个正则表达式不能正确匹配。     


    List l_operators = Arrays.asList(Pattern.compile(" (\\d+)").split(rtString.trim()));
    
输入字符串为"12+22+3"

我得到的输出是-- [,+,+]

列表的开头有一个匹配,不应该在那里?我真的看不到它,我可以使用一些见解。感谢。

3 个答案:

答案 0 :(得分:2)

从技术上讲,第一个分隔符(第一个数字序列)前面有一个空字符串。如果您有一行CSV,例如abc,def,ghi和另一个,jkl,mno,您显然想要知道第二个字符串中的第一个值是空字符串。 因此,在大多数情况下,行为

对于您的特定情况,您需要手动处理它,或以某种方式优化您的正则表达式。比如这样:

Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(rtString);
if (m.find()) {
  List l_operators = Arrays.asList(p.split(rtString.substring(m.end()).trim()));
  // ...
}

但理想情况下,您应该为这些类型的字符串使用解析器。例如,你不能使用正则表达式处理表达式中的括号。

答案 1 :(得分:1)

这是Java中split的行为。你只需要接受它(并处理它)或使用其他库来分割字符串。我个人试图避免从Java中分离出来。

一种替代方案的示例是从Google Guava查看Splitter

答案 2 :(得分:0)

尝试番石榴Splitter

Splitter.onPattern("\\d+").omitEmptyStrings().split(rtString)
相关问题