关于C#:使用regex确定字符串是否包含具有逗号分隔符的特定子字符串的重复序列,而不包含其他内容

Using Regex to determine if string contains a repeated sequence of a particular substring with comma separators and nothing else

我想找出一个字符串是否包含一个已知子字符串(带逗号分隔符)的重复序列,如果是这种情况,则返回true;否则返回false。例如:子字符串为"0,8"

字符串A:"0,8,0,8,0,8,0,8"返回true字符串B:"0,8,0,8,1,0,8,0"由于"1"而返回false

我尝试使用C_string函数contains,但它不符合我的要求。我对正则表达式完全陌生,但我觉得它应该足够强大。我应该用什么regex来做这个?


对于只包含给定子串的重复数(可能为零,导致空字符串)的字符串,其模式是\A(?:substring goes here)*\z\A匹配字符串的开头,\z匹配字符串的结尾,(?:...)*匹配0个或多个与冒号和右括号之间的内容匹配的副本。

但实际上字符串不匹配\A(?:0,8)*\z,因为有额外的逗号;匹配的示例是"0,80,80,80,8"。您需要明确说明逗号,比如\A0,8(?:,0,8)*\z

你可以在C中构建这样一个东西,因此:

1
2
3
4
5
6
7
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

硬编码逗号分隔符;您可以使其更通用。或者你只需要字面上的regex。不管怎样,这就是你需要的模式。

编辑根据迈克·塞缪尔的建议更改了锚定。