有没有人知道如何使用正则表达式来查找和替换
中的某些单词<b>[Keyword]</b>
我尝试使用Regex.Replace()
,但它似乎只支持直接替换,而不是在关键字的开头和最后添加<b></b>
。
示例:
Hello World!
关键字:
Hello
输出:
<b>Hello</b> World!
答案 0 :(得分:6)
你可以试试这个:
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
string
input = "Hello World!",
keyword = "Hello";
var result = Regex
.Replace(input, keyword, m =>
String.Format("<b>{0}</b>", m.Value));
Console.WriteLine(result);
}
}
答案 1 :(得分:0)
您不需要任何lambda即可在替换模式中重复使用整个匹配值,您可以使用$&
后向引用引用整个匹配值。参见Substitutions in Regular Expressions:
$&
在替换字符串中包含整个匹配项的副本。有关更多信息,请参见Substituting the Entire Match。
C#代码:
var input = "Hello World!";
var keyword = "Hello";
var result = Regex.Replace(input, Regex.Escape(keyword), "<b>$&</b>");
Console.WriteLine(result);
请参见online C# demo。
但是,上面的代码没有什么意义,因为仅使用字符串.Replace
:var result = input.Replace(keyword, $"<b>{keyword}</b>")
就可以实现相同的目的。因此,这里是您想使用正则表达式的一些想法:
整个单词匹配
keyword
仅包含字母/数字/下划线(“ word”字符)):Regex.Replace(input, $@"\b{keyword}\b", "<b>$&</b>")
keyword
可能包含非单词字符):Regex.Replace(input, $@"(?<!\w){Regex.Escape(keyword)}(?!\w)", "<b>$&</b>")
Regex.Replace(input, $@"(?<!\S){Regex.Escape(keyword)}(?!\S)", "<b>$&</b>")
不区分大小写的匹配
执行不区分大小写的正则表达式搜索时,可能需要这样的正则表达式来确保替换字符串中关键字的大小写相同:
Regex.Replace(input, Regex.Escape(keyword), "<b>$&</b>", RegexOptions.IgnoreCase)
请参见another C# demo:
var keyword = "A+";
Console.WriteLine("Unambiguous WB: " + Regex.Replace("A+B and A++", $@"(?<!\w){Regex.Escape(keyword)}(?!\w)", "<b>$&</b>"));
// => Unambiguous WB: A+B and <b>A+</b>+
keyword = "Hello";
Console.WriteLine("Regular WB: " + Regex.Replace("Hello World! Hello,World!", $@"\b{keyword}\b", "<b>$&</b>"));
// => Regular WB: <b>Hello</b> World! <b>Hello</b>,World!
Console.WriteLine("Whitespace WB: " + Regex.Replace("Hello, Hello Hello!", $@"(?<!\S){Regex.Escape(keyword)}(?!\S)", "<b>$&</b>"));
// => Whitespace WB: Hello, <b>Hello</b> Hello!
keyword = "hello";
Console.WriteLine("Case innsensitive: " + Regex.Replace("Hello, hello World!", Regex.Escape(keyword), "<b>$&</b>", RegexOptions.IgnoreCase));
// => Case innsensitive: <b>Hello</b>, <b>hello</b> World!