我有很多单词的列表。我需要的是找到以" 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();
当我不使用\时工作。但是用单个辅音返回单词。
答案 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)$")