如何使正则表达式在每个单词之间强制使用逗号?

Posted

技术标签:

【中文标题】如何使正则表达式在每个单词之间强制使用逗号?【英文标题】:How to make regex to enforce comma between every word? 【发布时间】:2020-08-24 07:20:34 【问题描述】:

我正在编写一个 C# ASP.NET MVC 应用程序,我需要为用户输入实施一些规则。

在表格中,用户可以在表格 IRxxxxxx 上写一些事故案例编号,其中 x 可以是数字 (0-9)。我想制作一个正则表达式来检查输入是否可以由一个案例编号或多个用逗号分隔(以及逗号前后的一些可能的空格)组成。我尝试了几件事,但无法正确完成。

有效的输入可能是:

IR123456 IR123456、IR123456、IR123456(等等) IR123456, IR123456,IR123456(注意第一个逗号后的空格)

无效的输入可能是:

IR123 IR1234567 ir123456 IR123456,,IR123456

【问题讨论】:

到目前为止你尝试过什么?为什么它不符合您的要求/您在哪里卡住了? 到目前为止我最好的选择是 (IR[0-9]6,?)*IR[0-9]6,它适用于 IR123456,IR123456,IR123456,但不适用于之前的空格或在逗号之后。 【参考方案1】:

这应该适用于大多数正则表达式引擎:

^IR\d6(,\s?IR\d6)*$

这会查找“IR”后跟任意 6 位数字。如果有其他 ID,这将确保在前一个 ID 后面有一个逗号(带有可选空格)。

Regex101

【讨论】:

你好,这行得通,但是如果逗号前后可以有任意数量的空格,那么像 "IR123456 , IR123456" 这样的字符串也会被匹配会是什么样子? :) 您好,正则表达式 ^IR\d6(\s*,\s*?IR\d6)*$ 就像我想要的一样工作,谢谢您的回答: )【参考方案2】:

你可以试试这个正则表达式:^((^|,)\s*IR\d6)+$

【讨论】:

你好。感谢您的回答,但这并不是我所追求的,因为它与整个字符串“IR123456,IR123456,IR123456”不匹配,而仅匹配 IR123456 数字。

以上是关于如何使正则表达式在每个单词之间强制使用逗号?的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式匹配多个逗号分隔的单词

如何使用正则表达式在()之间插入一个单词

正则表达式拆分逗号前面没有特定单词

正则表达式逗号不表达

如何使用正则表达式过滤掉任何没有逗号的东西?

正则表达式模式匹配第一个和最后一个标记之间的单词,第一个单词是常量