使用Regex确定字符串是否包含具有逗号分隔符的特定子字符串的重复序列,而不包含任何其他内容

时间:2012-06-29 04:01:07

标签: c# regex string

我想查找一个字符串是否包含已知子字符串的重复序列(使用逗号分隔符)而不是其他内容,如果是这种情况则返回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来做这件事?

1 个答案:

答案 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

对逗号分隔符进行硬编码;你可以使它更通用。或者你可能只需要文字正则表达式。无论哪种方式,这都是你需要的模式。

编辑根据迈克塞缪尔的建议更改了主播。