Regex.Match在c#中的双辅音

时间:2012-06-27 09:10:38

标签: c# regex

我有很多单词的列表。我需要的是找到以" ing"," ed"," ied"结尾的所有单词。以前用一个元音和一个辅音: 应该匹配单词:begged,slamming,zagging。不匹配帮助(" lp" -not double consonant)

\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();

当我不使用\时工作。但是用单个辅音返回单词。

2 个答案:

答案 0 :(得分:6)

尝试稍微放松一下这个条件:

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

您当前的正则表达式要求单词在双辅音和后缀之前至少有3个字符。所以“乞求”和“唠叨”是不匹配的。

但是,在组中看到“y”有点奇怪,而“u”缺失(例如“抢劫”)。你可能想要仔细检查一下。在“ied”之前我对双辅音有点怀疑,但我会留在那里。

答案 1 :(得分:0)

感谢nhahtdh。 问题出在外面的括号中。当我删除它时,它工作:

Regex.IsMatch(f.WordStr, @"^\w*[^aoyieu]+[aoyieu]([^aoyieu])\1(ed|ing|ied)$")