逗号分隔值的正则表达式

时间:2013-01-04 22:38:44

标签: java regex

我是新手写正则表达式所以请帮助。

我想匹配这种模式(用Java):

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

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

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

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

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

我仍然在构建它。

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

谢谢!

2 个答案:

答案 0 :(得分:4)

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

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

您可以尝试here

答案 1 :(得分:1)

请在下面的代码中找到包含逗号分隔评估字符串数字十进制的代码。

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