Как извлечь текст из предложения на основе кодирования
Пожалуйста, найдите ниже более подробную информацию.
У меня есть текст со мной "" 1200005 # 28102016_0612 Inv. ACHExtractDetail POC.DiscountDetail Scanner Test1 " & amp; также список ключевых слов
keywords.Add(new KeywordCTIBO() { Keyword = "Scanner" }); keywords.Add(new KeywordCTIBO() { Keyword = "Inv.ACHExtractDetail" }); keywords.Add(new KeywordCTIBO() { Keyword = "POC.DiscountDetail" });
Что мне нужно, так это извлечь "Inv.ACHExtractDetail" из текста, так как он присутствует в списке. Я имею в виду первое вхождение ключевого слова из текста тогда и только тогда, когда оно существует в списке.
Ниже код работает нормально, но я смотрю гораздо лучше, если это возможно без использования циклов.
List<KeywordCTIBO> keywords = new List<KeywordCTIBO>(); KeywordCTIBO matchedKeyword = null; keywords.Add(new KeywordCTIBO() { Keyword = "Scanner" }); keywords.Add(new KeywordCTIBO() { Keyword = "Inv.ACHExtractDetail" }); keywords.Add(new KeywordCTIBO() { Keyword = "POC.DiscountDetail" }); string text = "1200005 # 28102016_0612 Inv.ACHExtractDetail POC.DiscountDetail Scanner Test1"; //var matchedKeyWords = keywords.Where(f => text.ToLower().Split(',', ' ', ';').Contains(f.Keyword.ToLower())).Select(p => new { KeyWordBO = p, Index = text.ToLower().IndexOf(p.Keyword.ToLower()) }); //string[] arr = text.ToLower().Split(',', ' ', ';'); string [] arr = text.ToLower().Split(',', ' ', ';'); string s = string.Empty; foreach(var r in arr){ var matchedKeyWords = keywords.Where(f => r.Contains(f.Keyword.ToLower())).Select(p => new { KeyWordBO = p, Index = text.ToLower().IndexOf(p.Keyword.ToLower()) }); foreach (var f in matchedKeyWords) { s = f.KeyWordBO.Keyword; } } } public class KeywordCTIBO { public string Keyword { get; set; } }
Что я уже пробовал:
List<KeywordCTIBO> keywords = new List<KeywordCTIBO>(); KeywordCTIBO matchedKeyword = null; keywords.Add(new KeywordCTIBO() { Keyword = "Scanner" }); keywords.Add(new KeywordCTIBO() { Keyword = "Inv.ACHExtractDetail" }); keywords.Add(new KeywordCTIBO() { Keyword = "POC.DiscountDetail" }); string text = "1200005 # 28102016_0612 Inv.ACHExtractDetail POC.DiscountDetail Scanner Test1"; //var matchedKeyWords = keywords.Where(f => text.ToLower().Split(',', ' ', ';').Contains(f.Keyword.ToLower())).Select(p => new { KeyWordBO = p, Index = text.ToLower().IndexOf(p.Keyword.ToLower()) }); //string[] arr = text.ToLower().Split(',', ' ', ';'); string [] arr = text.ToLower().Split(',', ' ', ';'); string s = string.Empty; foreach(var r in arr){ var matchedKeyWords = keywords.Where(f => r.Contains(f.Keyword.ToLower())).Select(p => new { KeyWordBO = p, Index = text.ToLower().IndexOf(p.Keyword.ToLower()) }); foreach (var f in matchedKeyWords) { s = f.KeyWordBO.Keyword; } } } public class KeywordCTIBO { public string Keyword { get; set; } } }