C# で指定された正規表現と単語に対して可能なすべての一致を取得する必要があります。しかし、Regex.Matches() 関数はそれを与えていません。たとえば。
Regex.Matches("datamatics","[^aeiou]a[^aeiou]")
次の 2 つの一致のみを返します。
dat
mat
マッチとして「タム」を与えていません。「タム」が一致しない理由と、3つすべてを取得するにはどうすればよいか、誰か説明してもらえますか?
C# で指定された正規表現と単語に対して可能なすべての一致を取得する必要があります。しかし、Regex.Matches() 関数はそれを与えていません。たとえば。
Regex.Matches("datamatics","[^aeiou]a[^aeiou]")
次の 2 つの一致のみを返します。
dat
mat
マッチとして「タム」を与えていません。「タム」が一致しない理由と、3つすべてを取得するにはどうすればよいか、誰か説明してもらえますか?
この正規表現を使用
(?<=([^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
}
正規表現で重複する一致を取得することはできません。ただし、これを回避する方法はいくつかあります。を使用Regex.Match
して開始インデックスを指定する (ループを使用して文字列全体を処理する) か、次のように後読みまたは先読みを使用できます。
(?=[^aeiou]a)[^aeiou]
これが機能するのは、後読みと先読みが文字を消費しないためです。Match
一致のインデックスを含む を返します。キャプチャされるのは 1 文字だけなので、キャプチャの代わりにそれを使用する必要があります。