-2

正規表現(つまり、すべての組み合わせ)を使用して、特定の単語のすべての一致を取得する必要があります

コンテンツ:

ABC

これから、[AZ][AZ] のようなパターンを与えると、AB と BC を取得する必要があります。現在、一致したパターンとして「AB」のみを指定しています。

前もって感謝します

4

4 に答える 4

2
int i = 0;
List<Match> matches = new List<Match>();
while(i < input.Length){
  Match m = Regex.Match(input.Substring(i),"[A-Z]{2}");
  if(m.Success){
    matches.Add(m);
    i += m.Index+1;
  }else break;
}

lazy次のようにマッチングをサポートするように実装することもできます。

public static IEnumerable<Match> Matches(string input, string pattern) {
        int i = 0;
        while (i < input.Length){
            Match m = Regex.Match(input.Substring(i), "[A-Z]{2}");
            if (m.Success) {
                yield return m;
                i += m.Index + 1;
            }
            else yield break;
        }
}
//Use it
var matches = Matches(input, "[A-Z]{2}");
于 2013-09-17T07:39:11.410 に答える
1

先読みを使用して、一致を消費しないようにすることができます。

(?=([A-Z]{2}))

イデオネデモ

于 2013-09-17T07:40:53.827 に答える
1

.NET はルックアラウンドでのキャプチャ グループをサポートします

var result=Regex.Matches(input,"(?=(..))")
                .Cast<Match>()
                .Select(x=>x.Groups[1].Value);
于 2013-09-17T07:41:20.757 に答える
-2
int i = 0;
List<Match> matches = new List<Match>();
while(i < input.Length){
  Match m = Regex.Match(input,"[A-Z][Z-A]");
  if(m.Success){
    matches.Add(i++);
    i = m.Index ++ 1;
  }
}
于 2013-09-17T07:42:43.477 に答える