正则表达式查找和替换以换行标记

本文关键字:换行 替换 查找 正则表达式 | 更新日期: 2023-09-27 18:28:58

有人知道如何使用正则表达式查找并用替换某个单词吗

<b>[Keyword]</b>

我尝试使用Regex.Replace(),但它似乎只支持直接替换,而不是在关键字的开头和末尾添加<b></b>

示例:

Hello World!

关键词:

Hello

输出:

<b>Hello</b> World!

正则表达式查找和替换以换行标记

你可以试试这个:

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);
    }
}

您不需要任何lambda来在替换模式中重用整个匹配值,您可以使用$& backreference引用整个匹配值。请参见正则表达式中的替换

$& nbsp 在替换字符串中包括整个匹配项的副本。有关详细信息,请参见替换整个匹配。

C#代码:

var input = "Hello World!";
var keyword = "Hello";
var result = Regex.Replace(input, Regex.Escape(keyword), "<b>$&</b>");
Console.WriteLine(result);

请参阅联机C#演示。

然而,上面的代码没有什么意义,因为您只需使用字符串.Replace:var result = input.Replace(keyword, $"<b>{keyword}</b>")就可以实现相同的功能。因此,这里有一些您想要使用正则表达式的想法:

全词匹配

  • 规则单词边界(如果keyword仅由字母/数字/下划线("单词"字符)组成):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)

查看另一个C#演示:

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!