我想查找一个字符串是否包含已知子字符串的重复序列(使用逗号分隔符)而不是其他内容,如果是这种情况则返回true;否则是假的。例如:子串是“0,8”
字符串A:“0,8,0,8,0,8,0,8”返回true 字符串B:“0,8,0,8,1,0,8,0”因“1”
而返回false我尝试使用C#字符串函数Contains但它不符合我的要求。我对正则表达式来说是全新的,但我觉得它应该足够强大来做到这一点。我应该使用什么RegEx来做这件事?
答案 0 :(得分:3)
字符串的模式只包含给定子字符串的重复数字(可能为零,导致空字符串),为\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
对逗号分隔符进行硬编码;你可以使它更通用。或者你可能只需要文字正则表达式。无论哪种方式,这都是你需要的模式。
编辑根据迈克塞缪尔的建议更改了主播。