正则表达式匹配逗号分隔的字符串,在行的末尾没有逗号

时间:2015-06-11 07:18:43

标签: c# asp.net regex

我正在尝试编写一个允许输入键盘上所有字符(甚至是空格)的正则表达式,但会限制在行尾输入逗号。我试过这样做,包括所有可能的字符,但它仍然没有给我正确的输出:

   [RegularExpression("^([a-zA-Z0-9\t\n ./<>?;:\"'!@#$%^&*()[]{}_+=|\\-]+,)*[a-zA-Z0-9\t\n ./<>?;:\"'!@#$%^&*()[]{}_+=|\\-]+$", ErrorMessage = "Comma is not allowed at the end of {0} ")]

3 个答案:

答案 0 :(得分:2)

^.*[^,]$

。*表示所有字符,不需要这么长时间

答案 1 :(得分:1)

^([a-zA-Z0-9\t\n ./<>?;:\"'!@#$%^&*()[]{}_+=|\\-]+,)*[a-zA-Z0-9\t\n ./<>?;:\"'!@#$%^&*()[]{}_+=|\\-]+(?<!,)$

                                                                                                        ^^

最后添加lookbehind

答案 2 :(得分:0)

  

一个正则表达式,允许输入键盘上的所有字符(甚至是空格),但会限制在行尾输入逗号。

请注意,您输入的内容远远超过使用键盘输入的内容。基本上,您希望在的末尾允许任何字符一个逗号。

所以,

(?!,).(?=\r\n|\z)

此正则表达式正在检查每个(因为(?=\r\n|$)前瞻),(?!,)前瞻确保最后一个字符(我们匹配使用) .)不是逗号。 \z是一个明确的字符串结束锚。

请参阅regex demo

这甚至可以在客户端使用。

要获得整行匹配,您只需在模式的开头添加.*(因为我们没有使用单行标记,.与换行符号不匹配):

.*(?!,).(?=\r\n|\z)

或者(使用原子组或带有^行锚点的内联多行选项加快速度,但不会在客户端工作)

(?>.*)(?!,).(?=\r\n|\z)
(?m)^.*?(?!,).(?=\r\n|\z) // The fastest of the last three

请参阅demo