1

我是编写正则表达式的新手,所以请帮忙。

我想匹配这个模式(在 Java 中):

"ABC",010,00,"123",0,"time","time",01,00, 10,    10,88,217," ",," "

我得到的数据将始终采用上述格式,具有 16 个值。但格式永远不会改变。

我不是在寻找解析,因为这也可以通过 java split 解析。我将拥有大量这些数据,因此想要捕获前 16 个数据点并与此模式匹配以检查我是否正确接收到它,否则忽略。

到目前为止,我只尝试过这个正则表达式:

^(\".\"),.,(\".\"),.,(\".\"),(\".\"),.,.,.,.,.,.,(\".\"),.,(\".\")$

我仍在构建它的过程中。

我只需要匹配给定池中的模式。我取前 16 个数据点并尝试查看它是否与此模式匹配,否则忽略。

谢谢!!

4

2 回答 2

6

这应该可以解决问题。请记住,他并不关心数据点的出现顺序(即它们都可以是字符串或所有数字)。

(\s?("[\w\s]*"|\d*)\s?(,|$)){16}

你可以在这里试试。

于 2013-01-04T23:03:59.247 回答
1

请在下面的代码中找到包含对StringNumberDecimal的逗号分隔评估的代码。

 public static void commaSeparatedStrings() {       
    String value = "'It\\'s my world', 'Hello World', 'What\\'s up', 'It\\'s just what I expected.'";

    if (value.matches("'([^\'\\\\]*(?:\\\\.[^\'\\\\])*)[\\w\\s,\\.]+'(((,)|(,\\s))'([^\'\\\\]*(?:\\\\.[^\'\\\\])*)[\\w\\s,\\.]+')*")) {
        System.out.println("Valid...");
    } else {
        System.out.println("Invalid...");
    }
}

/**
 * 
 */
public static void commaSeparatedDecimals() {
    String value = "-111.00, 22111.00, -1.00";
    // "\\d+([,]|[,\\s]\\d+)*"
    if (value.matches(
            "^([-]?)\\d+\\.\\d{1,10}?(((,)|(,\\s))([-]?)\\d+\\.\\d{1,10}?)*")) {
        System.out.println("Valid...");
    } else {
        System.out.println("Invalid...");
    }
}

/**
 * 
 */
public static void commaSeparatedNumbers() {
    String value = "-11, 22, -31";      
    if (value.matches("^([-]?)\\d+(((,)|(,\\s))([-]?)\\d+)*")) {
        System.out.println("Valid...");
    } else {
        System.out.println("Invalid...");
    }
}
于 2017-03-27T15:52:52.480 回答