c# - 在字符串中查找完全匹配 - 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。
解决方案
您可以为此使用正则表达式。您的正则表达式模式可能类似于:
\b(Mr|Ms|Dr|Mrs)\b
\b
意思是词边界|
意思是OR。
因此,此正则表达式将匹配Mr
, Ms
, Dr
, 或Mrs
单词边界。
编辑:
您的代码的问题Mr
是Mrs
. 因此,任何包含它的字符串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"
推荐阅读
- c - 无法识别 DLL 文件格式
- r - 按模式子集字符向量
- python - 相同大小的数据框比较
- c# - 如何从 C# 中的长期 HTTP 连接接收实时数据?
- github - 如何使 git fork 保持最新状态
- javascript - 将 React 组件与容器底部对齐
- node.js - 在 TravisCI Deploy 中找不到 eslint
- asp.net - 如何免费或以尽可能低的成本在 AWS 上托管 ClickOnce?
- javascript - Object.freeze(globalThis) 会做什么?
- django - 如何在 django 项目之外访问 javascript?