diff --git a/DicomGrepCore/Enums/MatchPatternEnum.cs b/DicomGrepCore/Enums/MatchPatternEnum.cs index 3ff15f1..8c93908 100644 --- a/DicomGrepCore/Enums/MatchPatternEnum.cs +++ b/DicomGrepCore/Enums/MatchPatternEnum.cs @@ -9,6 +9,7 @@ namespace DicomGrepCore.Enums public enum MatchPatternEnum { Normal, + Wildcard, Regex } } diff --git a/DicomGrepCore/Extensions/StringExtensions.cs b/DicomGrepCore/Extensions/StringExtensions.cs deleted file mode 100644 index 6a90d64..0000000 --- a/DicomGrepCore/Extensions/StringExtensions.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace DicomGrepCore.Extensions -{ - public static class StringExtensions - { - public static bool CaseInsensitiveContains(this string text, string value, - StringComparison stringComparison = StringComparison.CurrentCultureIgnoreCase) - { - return text.IndexOf(value, stringComparison) >= 0; - } - } -} diff --git a/DicomGrepCore/Services/SearchService.cs b/DicomGrepCore/Services/SearchService.cs index 26886d3..b8338e8 100644 --- a/DicomGrepCore/Services/SearchService.cs +++ b/DicomGrepCore/Services/SearchService.cs @@ -1,5 +1,4 @@ -using DicomGrepCore.Extensions; -using DicomGrepCore.Entities; +using DicomGrepCore.Entities; using DicomGrepCore.Services.EventArgs; using System; using System.Collections.Generic; @@ -295,52 +294,44 @@ private bool CompareString(string refString, SearchCriteria _criteria, bool isDi return false; } - return CompareString(refString, _criteria.SearchText, _criteria.CaseSensitive, _criteria.WholeWord); + string testString = _criteria.SearchText; - } - - private bool CompareString(string refString, string testString, bool caseSensitive, bool wholeWord) - { - bool result = false; switch (criteria.MatchPattern) { default: case MatchPatternEnum.Normal: - if (wholeWord) - { - result = refString.Equals(testString, caseSensitive ? StringComparison.InvariantCulture : StringComparison.InvariantCultureIgnoreCase); - } - else - { - result = refString.CaseInsensitiveContains(testString, caseSensitive ? StringComparison.InvariantCulture : StringComparison.InvariantCultureIgnoreCase); - } + testString = Regex.Escape(testString); + break; + case MatchPatternEnum.Wildcard: + testString = Regex.Escape(testString); + testString = testString.Replace(@"\*", ".*").Replace(@"\?", ".{1}"); break; case MatchPatternEnum.Regex: - RegexOptions options = RegexOptions.Compiled; - if (!caseSensitive) - { - options |= RegexOptions.IgnoreCase; - } + break; + } - if (wholeWord) - { - // regex match start - if (!testString.StartsWith('^')) - { - testString = "^" + testString; - } + RegexOptions options = RegexOptions.Compiled | RegexOptions.Singleline; + if (!_criteria.CaseSensitive) + { + options |= RegexOptions.IgnoreCase; + } - // regex match end - if (!testString.EndsWith('$')) - { - testString += "$"; - } - } + if (_criteria.WholeWord) + { + // regex match start + if (!testString.StartsWith('^')) + { + testString = "^" + testString; + } - result = Regex.IsMatch(refString, testString, options); - break; + // regex match end + if (!testString.EndsWith('$')) + { + testString += "$"; + } } - return result; + + return Regex.IsMatch(refString, testString, options); } }