2012-11-21 52 views
0

我試圖弄清楚如何將文件(兩列)拆分爲readLine();通過考慮很多分隔符(見下文)。正則表達式:在Java中拆分一個複雜列表(兩列)

這裏是我的分隔符的所有可能性(見註釋)

+--------+---------+ 
+ ##some text  + //some text which starts with (##) I want to exclude this row 
+ 341,  222  + //comma delimited 
+ 211  321  + //space delimited 
+ 541  1231 + //tab delimited 
+ ##some text  + //some text which starts with (##) I want to exclude this row 
+ 11.3  321.11 + //double values delimited by tab 
+ 331.3 33.11 + //double values delimited by space 
+ 231.3, 33.1 + //double values delimited by comma 
+ ##some text  + //some text which starts with (##) I want to exclude this row 
+--------+---------+ 

我想獲得該表:

+--------+---------+ 
+ 341  222 + 
+ 211  321 + 
+ 541  1231 + 
+ 11.3  321.11 + 
+ 331.3  33.11 + 
+ 231.3  33.1 + 
+--------+---------+ 

我會很高興找到了解決這個問題

UPDATE:

現在我有([,\ s \ t;])+(對於逗號,製表符,空格,分號......)但我無法弄清楚如何處理##某些文本。我試過\ ## \ w +但沒有工作。有什麼建議?

+1

這是不是一個分裂,這是一個替代。 –

+0

您需要的輸出中的空格數量不斷變化。這是故意的嗎?正則表達式'(\ d +)\ D +(\ d +)'將只匹配所需的行並且順便捕捉數字。 –

+1

你有嘗試過什麼嗎? –

回答

1

你可以試試這個...
我曾嘗試它和它的工作的罰款。

(\\d+\\.?\\d*),?\\s*?(\\d+\\.?\\d*)

$1$2更換。

編輯:

TRY下面的代碼...

import java.util.regex.Pattern; 
import java.util.regex.Matcher; 

class regcheck 
{ 
    private static Pattern twopart = Pattern.compile("(\\d+\\.?\\d*),?\\s*?(\\d+\\.?\\d*)"); 

    public static void checkString(String s) 
    { 
     Matcher m = twopart.matcher(s); 
     if (m.matches()) { 
      System.out.println(m.group(1) +" " + m.group(2)); 
     } else { 
      System.out.println(s + " does not match."); 
     } 
    } 

    public static void main(String[] args) { 
     System.out.println("Parts of strings are "); 
     checkString("##some text"); 
     checkString("123,  4567"); 
     checkString("123, 342"); 
     checkString("45.45 4.3"); 
     checkString("3.78, 23.78"); 

    } 
} 

OUTPUT:

Parts of strings are 
##some text does not match. 
123 4567 
123 342 
45.45 4.3 
3.78 23.78 

m.group(1)會給你的第一部分。
m.group(2)會給你第二部分。

在代碼中使用單行checkstring()方法....

+0

我很困惑把$ 1和$ 2放在哪裏。 我使用正則表達式來分割一些東西。我的實際正則表達式是'String pair [] = s.split(「([,\\ s \\ t; ^])+」);'(我試圖添加## [az \ s] + |( [,\\ s \\ t; ^])+'哪個@garyh暗示我,但是我得到了'java.lang.ArrayIndexOutOfBoundsException:0 array is empty'。 –

+0

我找到了一些代碼... 試着把我的在模式中給出正則表達式。 這裏是http://stackoverflow.com/a/3483070/513340 – Pratik

+0

檢查張貼代碼.... – Pratik

0

假設ASCII不是輸入的一部分,你可以試試這個:

##[a-z\s]+|([\d\.]+)[,\s\t]+([\d\.]+) 

然後替換爲:

\1 \2  (or $1 $2) 

注意,這不允許在數字逗號

+0

不要工作。查看我的更新。 –