匹配每个以另一个单词开头的单词(包括特殊字符)的正则表达式
本文关键字:单词 包括 特殊字符 正则表达式 开头 另一个 | 更新日期: 2023-09-27 18:19:13
我使用一个简单的正则表达式来匹配包含以:
开头的单词的字符串string regExp = @"'b" + searchFor; // searchFor is input value to look for
matchName = Regex.IsMatch(recipient.User.FullName, regExp, RegexOptions.IgnoreCase);
对于单词来说效果很好(当然),但是如果FullName包含如下内容:
This is Ex$ample
并且用户尝试查找Ex$a
,然后它永远不匹配。
或者如果user searchFor是:
$
对于记录,它始终返回true。
我试着看其他帖子,但我找不到类似的东西。
感谢**UPDATED**
让我来解释一下。其思想是查找以某些单词开头的名称:
string searchFor = "Gha";
和recipient.User.FullName列表包含:
Jordan Ghassari
James Cunningham
Ghabriel Bercholee
匹配必须是:
Jordan Ghassari
Ghabriel Bercholee
还需要考虑fullname列表可以包含特殊字符。它需要在搜索
中包含特殊字符搜索o^bri
并获得:
O^Brian
搜索#34
并获得:
Depto #345
我不确定您的完整问题,但是您需要使用Regex转义器来处理这样的条件。$
是一个特殊字符。实际搜索美元符号是'$
。您也应该查找其他特殊字符并注意它们,尽管c# regex转义器会做标记。
编辑如下:
string[] names =
{
"Jordan Ghassari",
"James Cunningham",
"Ghabriel Bercholee",
"O^Brian",
"Depto #345",
"This is Ex$ample",
"$amuel"
};
string searchFor = Console.ReadLine(); // Input
searchFor = @"(?:(?<=^|'s)(?='S|$)|(?<=^|'S)(?='s|$))" + Regex.Escape(searchFor); // searchFor is input value to look for
Regex regEx = new Regex(searchFor, RegexOptions.IgnoreCase);
List<string> matchedNames = new List<string>();
foreach(string name in names){
if (regEx.IsMatch(name))
{
matchedNames.Add(name);
}
}
foreach (string match in matchedNames)
{
Console.WriteLine(match);
}
这是一个经过测试和工作的解决方案。您只需转义用户输入的模式部分,然后使用该模式创建一个新的Regex对象。'b
不能用于匹配特殊字符,所以我们使用了一些c#的后台代码,如下所示。然后循环遍历每个字符串并将匹配项存储在某种数据结构中,我选择了通用列表
不使用RegEx可能会更简单:
string searchString = "This is Ex$ample";
string searchFor = "Ex$a";
searchString = " " + searchString;
searchFor = " " + searchFor;
if (searchString.IndexOf(searchFor) >= 0)
{
// Match
} else {
// No Match
}
如果你想要一个不区分大小写的搜索,用这个代替:
if (searchString.IndexOf(searchFor, StringComparison.OrdinalIgnoreCase) >= 0)
{
// Match
} else {
// No Match
}