0

文字列に既知の部分文字列 (コンマ区切りを含む) の繰り返しシーケンスが含まれているかどうかを確認し、それ以外に何も含まれていないかどうかを確認し、その場合は 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# 文字列関数 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

コンマ区切り文字をハードコーディングします。より一般的にすることができます。または、リテラル正規表現が必要なだけかもしれません。いずれにせよ、それはあなたが必要とするパターンです。

EDITマイクサミュエルの提案ごとにアンカーを変更しました。

于 2012-06-29T04:11:09.297 に答える