C# Regex将文本替换为用户大小写文本,如何维护实际的单词大小写

C# Regex将文本替换为用户大小写文本,如何维护实际的单词大小写,c#,asp.net,regex,C#,Asp.net,Regex,我正在用关键字匹配并替换匹配的单词 支持用户以小写形式输入搜索关键字,如united,它与关键字匹配并替换关键字 实际字符串 String str=“这是美利坚合众国” 匹配和替换功能字符串被用户输入的小写匹配字符串替换后 这是比赛后的美利坚合众国 我希望匹配并替换字符串,同时保持字符串或数据库中匹配单词的实际大小写 为此,我使用以下代码。我怎样才能改变这一点,使我的要求是有意义的 string pattern = @"(\b(?:" + Request["SearchKeyword"]

我正在用
关键字
匹配并替换匹配的单词

支持用户以小写形式输入搜索关键字,如
united
,它与关键字匹配并替换关键字

实际字符串

String str=“这是美利坚合众国”

匹配和替换功能字符串被用户输入的小写匹配字符串替换后

这是比赛后的美利坚合众国

我希望匹配并替换字符串,同时保持字符串或数据库中匹配单词的实际大小写

为此,我使用以下代码。我怎样才能改变这一点,使我的要求是有意义的

    string pattern = @"(\b(?:" + Request["SearchKeyword"].ToString().Trim() + @")\b))";
    regex = new Regex(pattern, RegexOptions.IgnoreCase);
    result = regex.Replace(result, "<span class='highlight'>" + Request["SearchKeyword"].ToString() + "</span>",);
string模式=@“(\b(?“+Request[“SearchKeyword”].ToString().Trim()+@”)\b));
regex=新的regex(模式,RegexOptions.IgnoreCase);
result=regex.Replace(result,“+Request[“SearchKeyword”].ToString()+”,);
预期的期望输出
这是美国

您需要使用
Match().Value
而不是原始请求字符串

以下是您可以使用的代码:

var req = "united states";
var str = "This is United States Of America";
var pattern = @"((?<=^\p{P}*|\p{Zs})(?:" + req.ToString().Trim() + @")(?=\p{P}*$|\p{Zs}))";
var regx = new Regex(pattern, RegexOptions.IgnoreCase);
var m = regx.Match(str);
var result = string.Empty;
if (m.Success)
   result = regx.Replace(str, "<span class='highlight'>" + m.Value + "</span>");
var req=“美国”;
var str=“这是美利坚合众国”;
var pattern=@”((?您可以使用
Regex。用MatchEvaluator替换
方法

string str = "This is United States Of America";
string SearchKeyword = "united states";
string pattern = @"(\b(?:" + SearchKeyword.Trim() + @")\b)";
var regex = new Regex(pattern, RegexOptions.IgnoreCase);
var result = regex.Replace(str, new MatchEvaluator(m => "<span class='highlight'>" + m.ToString() + "</span>"));
string str=“这是美利坚合众国”;
字符串SearchKeyword=“美国”;
字符串模式=@“(\b(?“+SearchKeyword.Trim()+@”)\b)”;
var regex=新regex(模式,RegexOptions.IgnoreCase);
var result=regex.Replace(str,新的MatchEvaluator(m=>“”+m.ToString()+“”);

试过了,它像charm一样工作,样本数据需要做更多的测试,我怎样才能修改regex部分,使它匹配像lik
US
这样的单词,不仅像
US led
,目前它还匹配
US led
word的一部分,我怎样才能避免在匹配单词的开头或结尾出现
-
使用不同的边界。我会使用
\s |$
\s | ^
var pattern=@”(?如果单词的结尾像
你应该访问我们。
在这种情况下,它会中断,因为你正在使用
\s
。试试这个:
((?从性能角度看,我不确定哪一个更好,我认为您的解决方案应该更好。@KnowledgeSeeker,在输入字符串
string str=“This is UNITED of America(UNITED States)”;
上尝试两种答案,您将看到Regex.Replace with MatchEvaluator更好(它不会更改单词!)
string str = "This is United States Of America";
string SearchKeyword = "united states";
string pattern = @"(\b(?:" + SearchKeyword.Trim() + @")\b)";
var regex = new Regex(pattern, RegexOptions.IgnoreCase);
var result = regex.Replace(str, new MatchEvaluator(m => "<span class='highlight'>" + m.ToString() + "</span>"));