我想查找一个字符串是否包含已知子字符串的重复序列(带有逗号分隔符)而没有其他内容,如果是这种情况则返回 true;否则为假。例如:子字符串是“0,8”
字符串 A:“0,8,0,8,0,8,0,8”返回 true 字符串 B:“0,8,0,8,1,0,8,0”返回 false,因为 '1'
我尝试使用 C# 字符串函数 Contains,但它不符合我的要求。我对正则表达式完全陌生,但我觉得它应该足够强大来做到这一点。我应该使用什么正则表达式来做到这一点?
只包含重复数量的给定子字符串(可能为零,导致空字符串)的字符串的模式是\A(?:substring goes here)*\z
. 匹配字符串的\A
开头,字符串\z
的结尾,并(?:...)*
匹配与冒号和右括号之间的事物匹配的任何内容的 0 个或多个副本。
但是由于额外的逗号,您的字符串实际上并不匹配\A(?:0,8)*\z
;一个匹配的例子是“0,80,80,80,8”。您需要使用类似\A0,8(?:,0,8)*\z
.
您可以在 C# 中构建这样的东西:
string OkSubstring = "0,8";
string aOk = "0,8,0,8,0,8,0,8";
string bOK = "0,8,0,8,1,0,8,0";
Regex OkRegex = new Regex( @"\A" + OkSubstring + "(?:," + OkSubstring + @")*\z" );
OkRegex.isMatch(aOK); // True
OkRegex.isMatch(bOK); // False
对逗号分隔符进行硬编码;你可以让它更通用。或者,也许您只需要文字正则表达式。无论哪种方式,这都是您需要的模式。
编辑根据 Mike Samuel 的建议更改了锚点。