我有一个包含很多单词的列表。我需要的是找到所有以“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 时有效。但返回单辅音单词。
最佳答案
尽量放宽条件:
@"^[a-z]*[aoyie]([^aoyie])\1(ed|ing|ied)$"
您当前的正则表达式要求单词在双辅音和后缀之前至少有 3 个字符。所以“乞求”和“zagging”是不匹配的。
不过,在组中看到“y”而“u”不见了(例如“抢劫”)有点奇怪。你可能想仔细检查一下。我对“ied”之前的双辅音有点怀疑,但我会把它留在那里。
关于c# - Regex.Match 在 C# 中的双辅音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11222891/