public IEnumerable<string> Match(string match) { var list = new List<string>(); if (!IsPattern(match)) { if (this.words.Contains(match)) list.Add(match); return list; } var parts = SplitPattern(match); IList<string> result = this.words; int pos = 0; foreach (var part in parts) { if (part[0] == '(') { pos++; continue; } int len = part.Length; result = result.Where(w => w.Substring(pos, len) == part).ToList(); pos += len; } pos = 0; foreach (var part in parts) { if (part[0] != '(') { int len = part.Length; pos += len; continue; } result = result.Where(w => part.Contains(w[pos])).ToList(); pos++; } return result; }
public void AddAndMatchWord() { Language language = new Language(); language.AddWord("abc"); var result = language.Match("abc"); Assert.IsNotNull(result); Assert.AreEqual(1, result.Count()); Assert.AreEqual("abc", result.First()); }