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

本文关键字:字符串 分隔 正则表达式 | 更新日期: 2023-09-27 17:55:37

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

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

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

^.*[^,]$

.* 表示所有字符,不需要那么长时间

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

只需在末尾添加lookbehind即可。

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

请注意,您可以键入的内容比使用键盘键入的内容要多得多。基本上,您希望允许行尾除逗号以外的任何字符

所以

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

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

查看正则表达式演示

这甚至可以在客户端工作。

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

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

或者(使用原子组或带有行锚点开头的内联多行选项使其更快^但在客户端不起作用)

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

查看演示