[英]Regex to match comma separated string with no comma at the end of the line
我正在尝试编写一个允许输入键盘上所有字符(甚至是空格)的正则表达式,但会限制在行尾输入逗号。 我试过这样做,包括所有可能的字符,但它仍然没有给我正确的输出:
[RegularExpression("^([a-zA-Z0-9\t\n ./<>?;:\"'!@#$%^&*()[]{}_+=|\\-]+,)*[a-zA-Z0-9\t\n ./<>?;:\"'!@#$%^&*()[]{}_+=|\\-]+$", ErrorMessage = "Comma is not allowed at the end of {0} ")]
^.*[^,]$
。*意味着所有的char,不需要这么久
^([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
见演示
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.