正则表达式匹配行尾两次

时间:2015-03-21 23:52:09

标签: java regex

我正在使用文本文件来保存我游戏的所有书面文字。我试图通过使用allText.split(regex)按行将文本文件的文本拆分为名称和描述来获取项目的描述。文本文件如下所示:

Claws:Sharp claws capable of inflicting damage.
Potion:A drink that heals wounds.

正则表达式看起来像这样:

[:\n\r]

正则表达式正确匹配冒号,但它对换行符做了一些奇怪的事情。而不是匹配一次,在第一行的末尾,它匹配两次,在那一点......

要查看这些拆分的位置,请在此处查看:http://fiddle.re/gn8ew6(第一行是47个字符,第二行是33)。

如何防止这种情况发生?

4 个答案:

答案 0 :(得分:1)

您的正则表达式在行的末尾匹配两次,因为您的行以\n\r\r\n结尾。你可以use a regex like this

:|\n\r?+|\r\n?+

基本上,这与:匹配,或者匹配\n后跟可选的\r(如果它在那里消耗\r),或者匹配{{ 1}}后跟一个可选的\r(如果它在那里再次使用\n

但是,我建议您逐行读取文件。您可以使用\n

执行此操作
BufferedReader

答案 1 :(得分:0)

我鼓励你,在使用另一个时,尝试一下:

Pattern pattern = Pattern.compile("regex");
Matcher matcher = pattern.matcher("your text");

while(matcher.find()) {
  System.out.println("found: " + matcher.group(1));

}

答案 2 :(得分:0)

在启用了MULTILINE选项的情况下在RegexPlanet上使用此Regex::(.*)?$

了解Google上的Java中的MULTILINE模式,了解如何使用它们。我在你提供的链接上对它进行了测试并且它可以工作,它在两个行的组(1)中得到它。

使用开始和结束方法,您还可以获得每个组的位置(在您的示例中为[6,47]和[56,82])。

答案 3 :(得分:0)

您可以更改正则表达式,使名称和描述与单独的组相匹配,正则表达式与EOL或换行符匹配,如下所示: -

(.*?):(.*?)(\n|$)