正则表达式双新线

时间:2013-09-05 06:45:18

标签: java regex

我想要做的是采取双线的左右两部分。 示例

LEFT_PART\r\n\r\nRIGHT_PART

左右部分可以是任何东西,但它们不包含双重新行。 我正在做的是不工作(与我给它的字符串不匹配)。这就是我到目前为止所做的。

^(.*)[\r\r|\n\n|\r\n\r\n]{1,1}(.*)$

它可以从任何东西开始,然后是一条双新线,然后是任何东西。 我将左右分组,因为我需要在后面使用它们。

EDIT 我使用OR来涵盖所有三种类型的新行

4 个答案:

答案 0 :(得分:1)

它没有用,因为你使用了一个只匹配一个字符的字符类。你应该使用括号。此外,您可以使用{n}量词来简化正则表达式。要匹配\r\r,请使用\r{2}

^(.*)(?:\r|\n|\r\n){2}(.*)$  

除此之外,我宁愿使用以下方法获取系统的行分隔符:

String lineSeparator = System.getProperty("line.separator");
String regex = "^(.*)" + Pattern.quote(lineSeparator) + "{2}(.*)$  

答案 1 :(得分:1)

方括号用于字符类而不是分组。尝试使用parens:

^(.*)(\r\r|\n\n|\r\n\r\n)(.*)$

避免捕获双重换行符;

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

{1,1}也是多余的。我删除了它。

答案 2 :(得分:1)

试试这个:

(?m)^(.*)$[\r\n]{1,2}^$[\r\n]{1,2}^(.*)$

开关(?m)具有插入符号和美元在正则表达式的其余部分的换行符之前和之后匹配的效果

这是这个正则表达式的live demo

答案 3 :(得分:1)

尝试下一个:

^(.*)(?:(\r|\r?\n){2})(.*)$