0

C# で指定された正規表現と単語に対して可能なすべての一致を取得する必要があります。しかし、Regex.Matches() 関数はそれを与えていません。たとえば。

Regex.Matches("datamatics","[^aeiou]a[^aeiou]")

次の 2 つの一致のみを返します。

dat
mat

マッチとして「タム」を与えていません。「タム」が一致しない理由と、3つすべてを取得するにはどうすればよいか、誰か説明してもらえますか?

4

2 に答える 2

1

この正規表現を使用

(?<=([^aeiou]))a(?=([^aeiou]))

.net は lookarounds..cheers でのグループ キャプチャをサポートします

あなたのコードは

var lst= Regex.Matches(input,regex)
              .Cast<Match>()
              .Select(x=>x.Groups[1].Value+"a"+x.Groups[2].Value)
              .ToList();

lst を反復処理できるようになりました

foreach(String s in lst)
{
     s;//required strings
}
于 2013-06-20T17:43:01.400 に答える
0

正規表現で重複する一致を取得することはできません。ただし、これを回避する方法はいくつかあります。を使用Regex.Matchして開始インデックスを指定する (ループを使用して文字列全体を処理する) か、次のように後読みまたは先読みを使用できます。

  (?=[^aeiou]a)[^aeiou]

これが機能するのは、後読みと先読みが文字を消費しないためです。Match一致のインデックスを含む を返します。キャプチャされるのは 1 文字だけなので、キャプチャの代わりにそれを使用する必要があります。

于 2013-06-20T17:43:21.177 に答える