首页 > 解决方案 > 在字符串中查找完全匹配 - C#

问题描述

如何在字符串中搜索完全匹配?例如,如果我有一个包含此文本的字符串:

string ClientName = "Sunny Mrs Cool";
string[] stringArray = { "Mr", "Ms", "Dr", "Mrs" };
    
foreach (string x in stringArray)
{                               
   if (ClientName.Contains(x))
   {}
}

我想搜索“Mrs”,我只想得到完全匹配,而不是另一个。我尝试了 Contains 和 IndexOf 方法,但它们也给了我“先生”。有些字符串有 Ms 或 Dr 或 Mr。

标签: c#

解决方案


您可以为此使用正则表达式。您的正则表达式模式可能类似于:

\b(Mr|Ms|Dr|Mrs)\b
  • \b意思是词边界
  • |意思是OR

因此,此正则表达式将匹配Mr, Ms, Dr, 或Mrs单词边界。


编辑:

您的代码的问题MrMrs. 因此,任何包含它的字符串Mrs也将包含Mr. 因为你先搜索,Mr所以总会先找到Mrs

在单词边界上搜索以一种简单的方式解决了这个问题。


以下是使用 Regex 执行此任务的 C# 代码:

string clientName = "Sunny Mrs Cool";
string[] stringArray = { "Mr", "Ms", "Dr", "Mrs" };
string pattern = $"\\b({string.Join("|", stringArray)})\\b"; // or simply just "\b(Mr|Ms|Dr|Mrs)\b"
Console.WriteLine(Regex.Match(clientName, pattern).Groups[1].Value); // prints "Mrs"

推荐阅读