用逗号分隔的正则表达式字符串验证每个字符串的长度

时间:2011-02-22 09:30:44

标签: regex csv

我有一组用逗号分隔的字符串, 喜欢:猫,狗,大象

验证的内容就像用逗号分隔的字符串一样 范围从3到6的长度。 (字符串可以是。& ^ *#$)

,即a9&,bbbb,cc,ddddddd

在上面的字符串中,由于dint进入,因此ddddddd无效 长度范围3 t0 6。

这样a9&,bbbb,ccc,a12 $%,adsdff

我经历了很多问题,堆栈中的帖子溢出了 并从中得到一些想法

^ [1-9] \ d([,] [1-9] \ d){0,3} $这是我从stackoverflow发布的问题得到的正则表达式

这只接受数字,但我需要字母数字

我厌倦了改变但是努力工作 ^ 1-9A-ZA-Z {0,3} $

你可以帮帮我吗? 并解释每个符号的含义,以便我可以从中学到更多 你这些人。

感谢您发布以前问题的答案。

4 个答案:

答案 0 :(得分:1)

[^,]将接受所有内容但您使用的逗号作为分隔符。目前尚不清楚你的正则表达式应该给你什么,如果不长3-6的子串,长3-6的子串,既混合,又划分或者是什么。

试试这个:

Regex rx = new Regex("^(?:(?:([^,]{3,6})|(?:[^,]*))(?:,|$))*");
var matches = rx.Match("AA,BB&B,!CC,DDDDDD,EE");
foreach (Capture capture in matches.Groups[1].Captures) {
    string oneCapture = capture.Value;
}

捕获只是长3-6的字符串。

答案 1 :(得分:1)

我相信你想要的是以下内容;

^([^,]{3,6},)*[^,]{3,6}$

为了打破这一点,第一个^匹配一行的开头[^,] {3,6},表示除了逗号后跟一个逗号的3到6个字符。 ()*封闭表示重复此次0次或更多次,然后最后[^,] {3,6} $部分以3到6个字符结尾,这不是逗号。

答案 2 :(得分:0)

如果您提到的正则表达式已经适用于数字,这应该可以解决问题。 ^ \ d([,] \ d){0,3} $

作为参考,我经常使用msdn引用,但它开始时有点短,也许其他人可以提供一个很好的教程。

有一些工具,如expresso,可以帮助测试和开发正则表达式。

答案 3 :(得分:0)

我认为以下表达式符合您的要求:

^(?:([^,]{3,6}),?)*$

[^,]{3,6}部分表示“任何不是逗号,3到6次重复的字符”。这是表达的核心。括号组成一个组,允许您检索该组捕获的值。

,?部分的意思是“逗号,零或一次”。

这些部分被非捕获组(?: ... )包围。这意味着包含的表达式已分组,但您将无法检索由其捕获的值。该组必须应用重复字符*,这意味着“重复前一组零次或多次”。

锚点^$表示“字符串的开头”和“字符串的结尾”。它们阻止表达式仅匹配字符串的一部分。如果您在较大的字符串中搜索模式,则不需要它们。

您可能需要尝试Expresso来了解有关正则表达式的更多信息。该程序有一个分析器,用于描述表达式的各个部分。