0

我试图弄清楚如何将文件(两列)拆分为readLine(); 通过考虑很多分隔符(见下文)。

这是我的定界符的所有可能性(见评论)

+--------+---------+
+ ##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  +
+--------+---------+

我很高兴找到解决此问题的方法

更新:

现在我有([,\s\t;])+(用于逗号、制表符、空格、分号...),但我不知道如何处理##some 文本。我试过 \##\w+ 但没有用。有什么建议吗?

4

2 回答 2

1

你可以试试这个......
我已经试过了,它工作正常。

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

并替换为$1$2

编辑:

试试下面的代码...

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");

  }  
}

输出 :

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

m.group(1) will give you the first part.
m.group(2) will give you the second part.

In your code use checkstring() method for single line....

于 2012-11-22T06:41:30.487 回答
0

假设 ASCII 不是输入的一部分,你可以试试这个:

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

然后替换为:

\1   \2     (or $1    $2)

请注意,这不允许在数字中使用逗号

于 2012-11-21T12:09:02.930 回答