2013-01-04 53 views
1

我是新来写正则表达式,所以请帮助。逗号分隔值的正则表达式

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

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

我得到的数据始终处于上述格式有16个值。但格式永远不会改变。

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

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

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

我仍然在建设的过程之中。

我只需要匹配给定池中的模式。我首先获得16个数据点,并尝试查看它是否符合这种模式,否则忽略。

谢谢!

+0

请显示您的一些努力。我们很乐意帮助你。 – Smit

+0

我刚刚试过这个......这是不正确的,但我仍然在构建它。 ^(\ “\ ”),...,(\“ \ ”),...,(\“ \ ”),(\“ \”),...,。。。,,。,( \“。\”),。,(\“。\”)$ – Ikshvak

+0

@Ikshvak缺乏评论意见,您最好修改相关问题。也给你预期的输入。预期的产出,以便它易于理解。 – Smit

回答

4

这应该可以做到。请记住,他不关心数据点出现的顺序(即它们可能都是字符串或全部数字)。

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

您可以试试here

+0

+1,试过了,只有在用'*'替换你的两个'? – jlordo

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..."); 
    } 
} 
相关问题