2016-07-20 20 views
1

这里真的很绿。我试图得到一个在Notepad ++中使用BlueJ运行在Java中的正则表达式,但是Java似乎忽略了它。我正在使用其他replaceAll函数使用正则表达式,并且所有这些都在工作。Java正在忽略使用BlueJ去除重复行的正则表达式

我有这个,但它告诉我\ s是一个非法的转义字符:

itemList[i] = itemList[i].replaceAll("^(\s*\r\n){2,}", "\r\n"); 

我读到的Java引擎,改变了\ s到\ S所以并不违法:

itemList[i] = itemList[i].replaceAll("^(\\s*\r\n){2,}", "\r\n"); 

我尝试使用[[:空间:]代替,但是,它仍然没有做替换功能。

itemList[i] = itemList[i].replaceAll("^([[:space:]]*\r\n){2,}", "\r\n"); 

这个Java工具正在处理数百行代码,并且人们在使用Notepad ++删除重复行时遇到了问题。我想可能在格式化工具中这样做会消除这些问题。这里是文字的例子:

1. Modification: No Error Message When SQL Server Down 

       S9# 395 


       Summary 

       No error message when the SQL Server is 
       down. 

       Workaround 

       There is currently no 
       workaround for this issue. The system will become 
       unusable if SQL server is down. 
+0

我发现了一个类似的线程,可以帮助您.http://stackoverflow.com/questions/1573361/find-duplicate-lines-and-remove-using-regular-expression-with-replace-feature – lsiva

+0

谢谢。我正在阅读它。 – PatrickD

回答

1

您需要使用多行模式,所以^可以匹配任何行的开头。否则它只匹配整个字符串的开头。多行模式是大多数文本编辑器的默认模式,但在其他任何地方使用正则表达式时,您必须指定它。只需添加(?m)的正则表达式的开头:

(?m)^(\\s*\r\n){2,} 

如果你正在运行的Java 8,我建议这样做,而不是:

replaceAll("(?m)^(?:\\h*(\\R)){2,}", "$1") 

\s*是模糊的,因为它可以匹配换行符以及空间; \h只匹配水平空格(例如空格和制表符)。

\R匹配任何种类的换行符:\r\n,\n\r或其他几个不太常见的换行符。内部组(\R)捕获最后一个冗余换行符,并且"$1"将其插回。这样,如果有人更改了文档的换行格式,则不会产生任何令人讨厌的意外。

+0

非常感谢,它就像一个魅力!我一直在努力研究这一点,为期一天的阅读和尝试不同的事情。我真的很感谢你的帮助。 – PatrickD