6

たくさんの単語のリストがあります。私が必要としているのは、「ing」、「ed」、「ied」で終わり、前に1つの母音と2つの子音があるすべての単語を見つけることです。単語と一致する必要があります:懇願、スラミング、ザグ。一致しない支援(「lp」-二重子音ではない)

\w*[^aoyie][aoyie]([^aoyie])\1(ed|ing|ied)

RegexPal.comで機能していますが、C#では機能していません(どの単語とも一致せず、リストに0語を返します)

私のコード:

List<Book_to_Word> allWords = (from f in db2.Book_to_Words.AsEnumerable() select f).ToList();

List<Book_to_Word> wordsNOTExist = (from f in allWords
                        where Regex.IsMatch(f.WordStr, @"^(\w*[^aoyie]+[aoyie]([^aoyie])(ed|ing|ied))$")
                                    select f).ToList();

\1を使用しない場合に動作します。ただし、子音が1つだけの単語を返します。

4

2 に答える 2

6

状態を少し緩和してみてください。

@"^[a-z]*[aoyie]([^aoyie])\1(ed|ing|ied)$"

現在の正規表現では、単語の二重子音と接尾辞の前に少なくとも3文字が必要です。したがって、「物乞い」と「ザグ」は一致しません。

ただし、グループ内に「y」が表示され、「u」が欠落している(「強盗」など)のは少し奇妙です。あなたはおそらくそれについて再確認したいと思うでしょう。そして、「ied」の前に二重子音について少し疑問がありますが、そのままにしておきます。

于 2012-06-27T09:21:42.103 に答える
0

nhahtdhに感謝します。問題は括弧の外にありました。私がそれらを削除したとき、それは機能しました:

Regex.IsMatch(f.WordStr, @"^\w*[^aoyieu]+[aoyieu]([^aoyieu])\1(ed|ing|ied)$")
于 2012-06-27T09:54:40.923 に答える