我正在使用文本文件来保存我游戏的所有书面文字。我试图通过使用allText.split(regex)
按行将文本文件的文本拆分为名称和描述来获取项目的描述。文本文件如下所示:
Claws:Sharp claws capable of inflicting damage.
Potion:A drink that heals wounds.
正则表达式看起来像这样:
[:\n\r]
正则表达式正确匹配冒号,但它对换行符做了一些奇怪的事情。而不是匹配一次,在第一行的末尾,它匹配两次,在那一点......
要查看这些拆分的位置,请在此处查看:http://fiddle.re/gn8ew6(第一行是47个字符,第二行是33)。
如何防止这种情况发生?
答案 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|$)