2015-01-15 27 views
0

嗨,我有一個文件有很多不良的數據行。我已經識別出有不良數據的行。該文件非常大,它不能手動完成。這個問題可能會在未來再次出現,所以我正在用java編寫一個小工具,根據輸入的正則表達式去除壞段並將其刪除。寫一個字符串的正則表達式

壞數據的一個例子是

ABC*HIK*UG*XY\17 

我試着寫了上面的字符串正則表達式。到目前爲止

只有"(^ABC)"作品和ABC被刪除。

當我使用這個沒有任何反應。

"(^ABC*.XY\17$)" 

請給出您的意見。

編輯:

答案是工作完美,但

如果我輸入文件包含此

ABC 
123 
ABC*HIK*UG*XY\17 
1025 
KHJ*YU*789 

我應該得到的輸出喜歡

ABC 
123 
1025 
KHJ*YU*789 

,但我發現像這樣

ABC 
123 

1025 
KHJ*YU*789 
+0

您是否有權訪問Perl或Python?我會使用那些Java ... – 2015-01-15 17:30:49

+2

你能提供一個更好的解釋'壞數據',以及你想從中得到什麼? – DaaaahWhoosh 2015-01-15 17:30:58

+0

我只是想刪除它們。他們不是我需要的。 – 2015-01-15 17:33:46

回答

1

你的模式更改爲,

"^ABC.*XY\\\\17$" 

在java中,你需要三次逃避反斜槓,以匹配單個字符\。而匹配任何字符零次或多次的模式必須如.*而不是*.而且您也不需要將您的模式放入捕獲組中。

String s = "ABC\n" + 
     "123\n" + 
     "ABC*HIK*UG*XY\\17\n" + 
     "1025\n" + 
     "KHJ*YU*789"; 
System.out.println(s.replaceAll("(?m)^ABC.*XY\\\\17\n?", "")); 

輸出:

ABC 
123 
1025 
KHJ*YU*789 

由於我們使用在我們的正則表達式錨,我們需要添加改性劑。在我們的例子中,我們需要添加多行修飾符(?m)

+0

完美!像魔術一樣工作。你能告訴我如何刪除空行? – 2015-01-15 17:34:55

+0

匹配一個空行使用這個正則表達式'^ $'。對於上述情況,我認爲你需要這個'「^ ABC。* XY \\\\ 17 \ n」'。這也匹配匹配字符後面的換行符。 – 2015-01-15 17:38:01

+0

使用'\ s *'如果包含任何空格。 '「^ \\ s * ABC。* XY \\\\ 17 $」'。您仍然有任何問題,請將您的問題的確切輸入與預期輸出一起添加。 – 2015-01-15 17:46:41