0

我想查找一个字符串是否包含已知子字符串的重复序列(带有逗号分隔符)而没有其他内容,如果是这种情况则返回 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,但它不符合我的要求。我对正则表达式完全陌生,但我觉得它应该足够强大来做到这一点。我应该使用什么正则表达式来做到这一点?

4

1 回答 1

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

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

编辑根据 Mike Samuel 的建议更改了锚点。

于 2012-06-29T04:11:09.297 回答