gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:02:58 24 4
gpt4 key购买 nike

我需要使用正则表达式验证逗号分隔的字符串,但我有两个问题。

我的示例输入如下,

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

我写了以下正则表达式来验证输入
^([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

最佳答案

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

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

Regex demo

要删除逗号周围的空格,您可以匹配包含空格和逗号的字符串 *, *然后用一个逗号替换由空格包围的逗号。
^ *[\w!@#$%?=*&.-]+(?: [\w!@#$%?=*&.-]+)*(?: *, *[\w!@#$%?=*&.-]+(?: [\w!@#$%?=*&.-]+)*)* *$

Regex demo | C# demo

代码示例
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

关于c# - 如何使用正则表达式验证带空格的逗号分隔字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61745939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com