【发布时间】:2020-05-12 07:19:34
【问题描述】:
我需要使用正则表达式验证逗号分隔的字符串,但我有两个问题。
我的示例输入如下,
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
【问题讨论】:
-
为什么是正则表达式?是任务吗?使用
string.Split很容易解决这个问题。var values = input.Split(','); var validFormat = !values.Any(i => string.IsNullOrWhiteSpace(i)); -
@InBetween 正则表达式方法还允许检查所有值都是有效字符,并且没有值是空的
-
@InBetween 我需要使用正则表达式验证第一个问题,先生,第二个问题可以是任何问题。是的,这是我的任务的一部分
-
@CertainPerformance 你也可以对 split 做同样的事情,我也看不到你似乎暗示的限制。这是一项任务,所以讨论这个问题没有用。
-
第一个问题已经解决了很多次了,here is my answer。例如。删除逗号周围的空格也是一个常见问题,请参阅this thread。