当前位置: 首页 > 知识库问答 >
问题:

如何使用正则表达式验证带有空格的逗号分隔字符串

苏高峰
2023-03-14

我需要使用regex验证逗号分隔的字符串,但我有两个问题。

我的示例输入如下,

ERWSW1,ERWSW2,ASA,S4,ERWSW5,ERWSW6,ERWSW7 - Valid

ERW SW1,ERW SW2,ASA,S4,ERW SW5,ERW SW6,ERWSW7 - Valid(space between word should valid)

ERWSW1,ERWSW2,ASA,S4,ERWSW5,ERWSW6,ERWSW7, - Invalid - Comma at end

,ERWSW1,ERWSW2,ASA,S4,ERWSW5,ERWSW6,ERWSW7 - Invalid - Comma at beginning

ERWSW1,ERWSW2,,ASA,S4,ERWSW5,ERWSW6,ERWSW7 - Invalid - No value between 2,3 comma

我编写了以下Regex来验证输入

^([a-z A-Z0-9 !@#$%?=*&-]+,)*[a-z A-Z0-9 !@#$%?=*&\s-]+$

第一个问题是逗号之间的空格显示为有效字符串时。

Eg: ERWSW1, ,   ,ERWSW2,ASA,S4

我需要避免,我该怎么做?

我的第二个问题是,我还需要从字符串中删除额外的空间。两个删除我需要的额外空间功能。(这与上述正则表达式无关)

Input: ERWSW1 ,  ERW SW2,ASA ,S4 ,ERW SW5,ERWSW6,ERWSW7

我需要以下输出,

RWSW1,ERW SW2,ASA,S4,ERW SW5,ERWSW6,ERWSW7

更新:

对于第二个问题,我编写了以下代码,

string str = " ERW SW1 , ERW SW2 , ASA";
var ss = Regex.Replace(str, " *, *", ",");

但它不能正确删除空格,我需要这个输出

ERW SW1,ERW SW2,ASA

共有1个答案

姚鹤龄
2023-03-14

可以使用字符类指定允许匹配的内容。对于单词之间的空格,可以使用前面有空格的重复组。

^[\w!@#$%?=*&.-]+(?: [\w!@#$%?=*&.-]+)*(?:,[\w!@#$%?=*&.-]+(?: [\w!@#$%?=*&.-]+)*)*$

Regex演示

要删除逗号周围的空格,可以匹配包含空格和逗号的字符串,*,然后用单个逗号替换逗号周围的空格。

^ *[\w!@#$%?=*&.-]+(?: [\w!@#$%?=*&.-]+)*(?: *, *[\w!@#$%?=*&.-]+(?: [\w!@#$%?=*&.-]+)*)* *$

正则表达式演示|C#演示

代码示例

string[] strings = {
    "ERWSW1,ERWSW2,ASA,S4,ERWSW5,ERWSW6,ERWSW7",
    "ERW SW1,ERW SW2,ASA,S4,ERW SW5,ERW SW6,ERWSW7",
    "ERWSW1,ERWSW2,ASA,S4,ERWSW5,ERWSW6,ERWSW7,",
    ",ERWSW1,ERWSW2,ASA,S4,ERWSW5,ERWSW6,ERWSW7",
    "ERWSW1,ERWSW2,,ASA,S4,ERWSW5,ERWSW6,ERWSW7",
    "ERWSW1 ,  ERW SW2,ASA ,S4 ,ERW SW5,ERWSW6,ERWSW7",
    "ERW*SW1,ERW-SW2,A.SA",
    " ERWSW1 , ERWSW2 ,ASA,S4,ERWSW5 "
};

string pattern = @"^ *[\w!@#$%?=*&.-]+(?: [\w!@#$%?=*&.-]+)*(?: *, *[\w!@#$%?=*&.-]+(?: [\w!@#$%?=*&.-]+)*)* *$";

foreach (String s in strings) {
    if (Regex.IsMatch(s, pattern)) {
        Console.WriteLine(Regex.Replace(s, " *, *", ",").Trim());
    }
}

输出

ERWSW1,ERWSW2,ASA,S4,ERWSW5,ERWSW6,ERWSW7
ERW SW1,ERW SW2,ASA,S4,ERW SW5,ERW SW6,ERWSW7
ERWSW1,ERW SW2,ASA,S4,ERW SW5,ERWSW6,ERWSW7
ERW*SW1,ERW-SW2,A.SA
ERWSW1,ERWSW2,ASA,S4,ERWSW5
 类似资料:
  • 我正在尝试使用正则表达式验证ruby类中文本字段中逗号分隔的单词字符串。以下应该是有效的: 以下内容应无效: 我以为这能行 在Rubular上,它似乎是有效的,但当我在我的类中进行如下验证时,它会接受应该是无效字符串的内容。 我不确定我的问题是在于正则表达式还是验证方法本身。感谢任何帮助。

  • 我想将一个长数组值转换为一个特定格式的字符串。 例如,将longArray={0,1,2,3}转换为字符串0.1.2.3 我可以执行arrays.ToString(longArray),它将返回[0,1,2,3]。 现在必须将字符串[0,1,2,3]转换为0.1.2.3

  • 我使用以下正则表达式来验证单个电子邮件地址。如何使此正则表达式接受以逗号分隔的电子邮件地址列表? 我使用razor视图将正则表达式放置在输入标记中:

  • 我有这个用逗号分隔的多个单词的正则表达式: 单词的数量应该限制在正好四个,我尝试了以下方法,但这没有完成工作: 有效输入示例: 无效输入示例:

  • 我试图验证一个逗号分隔的数字列表,其中数字可以是1到3位,可以以0开头,但不能是0(0、00或000)。我正在使用以下内容,但当我测试“44222555”时,我发现无效: 我认为90在这里也是无效的,但应该是有效的

  • 我需要一个. Net(C#)正则表达式来匹配逗号分隔的数字列表,如果有逗号作为最后一个字符,这些数字将不匹配 我已经找到了这个Regex但是当结尾有逗号时匹配 什么是符合这种模式的正则表达式模式? 编辑:为清晰起见添加了1个示例,正确答案适用于