正则表达式帮助 - 逗号分隔字符串

Joh*_* H. 14 regex vb.net

我没有写很多正则表达式,所以我需要一些帮助.

我需要一个正则表达式,可以验证字符串是一个字母数字逗号分隔的字符串.

例子:

  • 123, 4A67, GGG, 767 是有效的.
  • 12333, 78787&*, GH778 会无效的
  • fghkjhfdg8797< 会无效的

这是我到目前为止所做的,但不是很正确: ^(?=.*[a-zA-Z0-9][,]).*$

有什么建议?

Ker*_* SB 19

听起来你需要一个像这样的表达式:

[0-9a-zA-Z]+(,[0-9a-zA-Z]+)*
Run Code Online (Sandbox Code Playgroud)

Posix允许更自我描述的版本:

[[:alnum:]]+(,[[:alnum:]]+)*
[[:alnum:]]+([[:space:]]*,[[:space:]]*[[:alnum:]]+)*  // allow whitespace
Run Code Online (Sandbox Code Playgroud)

如果您也愿意接受下划线,请搜索整个单词(\w+):

\w+(,\w+)*
\w+(\s*,\s*\w+)*  // allow whitespaces around the comma
Run Code Online (Sandbox Code Playgroud)

(感谢Alan指出我的几个失败!)

  • 这个答案有一些问题:(1)POSIX"字符类"不能直接使用; 它必须用另一组方括号括起来,例如`[[:alnum:]] +`.但这是因为.NET不支持它们的学术(甚至不是以不同的形式,如Java的'\ p {Alnum}`).(2)`\ w`,就像所有字符类短号(`\ s`,`\ d`等)一样,只匹配一个字母,所以你应该使用`\ w +`.(3)您不允许令牌之间有空格. (2认同)

Ner*_*ury 6

试试这个模式: ^([a-zA-Z0-9]+,?\s*)+$

我用你的案例测试了它,以及一个数字“123”。我不知道你是否总是有逗号。

[a-zA-Z0-9]+手段匹配这些符号的1个或多个所述的,?装置匹配0或1逗号(基本上,逗号是可选的)的\s*把手逗号后1个或多个空格,最后是外+说图案的匹配1个或多个。

这也将匹配 123 123 abc(没有逗号)这可能是一个问题 这也将匹配123,(以逗号结尾)这可能是一个问题。