Java正在忽略使用BlueJ去除重复行的正则表达式
这里真的很绿。我试图得到一个在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.
您需要使用多行模式,所以^
可以匹配任何行的开头。否则它只匹配整个字符串的开头。多行模式是大多数文本编辑器的默认模式,但在其他任何地方使用正则表达式时,您必须指定它。只需添加(?m)
的正则表达式的开头:
(?m)^(\\s*\r\n){2,}
如果你正在运行的Java 8,我建议这样做,而不是:
replaceAll("(?m)^(?:\\h*(\\R)){2,}", "$1")
\s*
是模糊的,因为它可以匹配换行符以及空间; \h
只匹配水平空格(例如空格和制表符)。
\R
匹配任何种类的换行符:\r\n
,\n
,\r
或其他几个不太常见的换行符。内部组(\R)
捕获最后一个冗余换行符,并且"$1"
将其插回。这样,如果有人更改了文档的换行格式,则不会产生任何令人讨厌的意外。
非常感谢,它就像一个魅力!我一直在努力研究这一点,为期一天的阅读和尝试不同的事情。我真的很感谢你的帮助。 – PatrickD
我发现了一个类似的线程,可以帮助您.http://stackoverflow.com/questions/1573361/find-duplicate-lines-and-remove-using-regular-expression-with-replace-feature – lsiva
谢谢。我正在阅读它。 – PatrickD