Java正则表达式用符号替换新行

时间:2016-06-24 06:34:55

标签: java regex

我想替换此输入文本

https://console.developers.google.com/apis/api/drive/overview?project=

成为(必需的o / p) Line1 %% Line 2 %% Line 3。

我使用了正则表达式

Line1
Line 2
Line 3.

但它给了我o / p as

string.replaceAll("[\\n]+[\\r]", "%%");

到目前为止我尝试过的其他正则表达式 - Line1 Line 2 Line 3. 并且所有都提供不同的o / p但不是我需要的o / p。请帮忙。

1 个答案:

答案 0 :(得分:2)

您只需将\r\n放入1个char类:

String result = "Line1\r\nLine 2\r\nLine 3.".replaceAll("[\r\n]+", "%%");
                                                         ^^^^^^^

请参阅IDEONE demo[\r\n]+匹配1个或多个LF(\n)或CR(\r)符号的序列。

请注意,您可以使用"[\\r\\n]+"获取相同的输出,其中\n\r作为特殊的正则表达式转义序列传递,而在前一个示例中,传递文字CR和LF符号到正则表达式引擎。

另一个解决方案(从Java 8开始)正在使用"\\R+"(请参阅this reference \R任何Unicode换行符序列相当于\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029] )。 \R匹配任何换行符序列+匹配量化模式的一次或多次出现。

**如果您还要删除行上的前导/尾随空格,请使用

replaceAll("\\s*[\r\n]+\\s*", "%%"));
//or
replaceAll("[^\\S\r\n]*[\r\n]+[^\\S\r\n]*", "%%"));
//or
replaceAll("[\\p{Zs}\t]*[\r\n]+[\\p{Zs}\t]*", "%%"));
// or
replaceAll("[\\s&&[^\n\r]]*[\r\n]+[\\s&&[^\n\r]]*", "%%"));

请参阅this IDEONE demo

[^\\S\r\n](= [\\s&&[^\n\r]])匹配与\s匹配的任何空格,\r\n除外。 [\\p{Zs}\t]匹配任何水平空格(与PCRE / PHP中的\h相同)。