private string BuildRegexForExactMatch(CustomEntitySelection selection) { string word = selection.Text.Trim(); StringBuilder escapedWord = new StringBuilder(@"(?=("); if (!word.First().IsDelineating()) { escapedWord.Append(@"\b"); } for (int currWordCharIndex = 0; currWordCharIndex < word.Length; currWordCharIndex++) { if (word[currWordCharIndex].IsDelineating()) { escapedWord.Append(@"[\s\p{P}]"); } else { escapedWord.Append(word[currWordCharIndex]); } } if (!word.Last().IsDelineating()) { escapedWord.Append(@"\b"); } escapedWord.Append("))"); string pattern = (selection.CaseSensitive) ? @"(?x)" + escapedWord : @"(?ix)" + escapedWord; return(pattern); }
public CustomEntityLookupImplementation(CustomEntitiesDefinition entityDefinitions) { _targetEntities = entityDefinitions; _selections = new HashSet <CustomEntitySelection>(); foreach (var tce in _targetEntities.TargetCustomEntities) { var entitySelection = new CustomEntitySelection(tce); _selections.Add(entitySelection); if (tce.Aliases?.Any() == true) { foreach (var alias in tce.Aliases) { var aliasSelection = new CustomEntitySelection(tce, alias); if (!_selections.Contains(aliasSelection)) { _selections.Add(aliasSelection); } } } } }