6

我有很多单词的列表。我需要的是找到所有以“ing”、“ed”、“ied”结尾的单词,并且之前只有一个元音和双辅音:应该匹配单词:begged、slamming、zagging。不匹配帮助(“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 时工作。但返回带有单个辅音的单词。

4

2 回答 2

6

尝试放松一下条件:

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

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

但是,在组中看到“y”而缺少“u”(例如“mugged”)有点奇怪。你可能想仔细检查一下。而且我对“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 回答