正则表达式以匹配逗号分隔的字符串,行尾没有逗号
本文关键字:字符串 分隔 正则表达式 | 更新日期: 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
查看演示