Matcher在Ubuntu与Windows上给出了不同的结果

时间:2013-01-10 20:48:07

标签: java regex eclipse nlp stanford-nlp

我在Ubuntu和Windows上运行完全相同的eclipse项目,但获得的输出不同。

以下代码中出现不均匀行为:

String regex = "<token id=\"(.*)\">.*\n.*<word>(.*)</word>.*\n.*<lemma>(.*)</lemma>.*\n.*\n.*\n.*<POS>(.*)</POS>";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(fileAsString);
while (matcher.find()) {
    ...
}

(matcher.find())检查在Windows上返回false但在Ubuntu上返回true(这是预期的行为)。

Eclipse Juno和jdk7。

也许它与操作系统没有关系,但这是我在并行调试之后找到的唯一不同之处,并且在两个环境中检查了项目的属性之后。

任何想法的差异???

3 个答案:

答案 0 :(得分:4)

您正在匹配\n,这是Linux的结尾,但不是Windows(Windows需要\r\n)。像\r?\n之类的东西可以解决您的具体问题。

也就是说,你永远不应该用正则表达式解析任何类似HTML的(包括XML)。你错过了XML所涉及的一切,其中最简单的就是手写“错误”的灵活性,如不同的标签顺序,空格等。

答案 1 :(得分:1)

这可能是行尾字符的差异。尝试将可选的\ r添加到正则表达式。

答案 2 :(得分:1)

很可能是因为行结尾。默认情况下,该点与行结尾不匹配,并且您在正则表达式中明确查找\n

尝试使用Pattern.DOTALL编译您的模式,或将\r?\n放在正则表达式\n的任何位置。