首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正则表达式查找和替换以包装标记

正则表达式查找和替换以包装标记
EN

Stack Overflow用户
提问于 2013-08-26 09:57:46
回答 2查看 3K关注 0票数 3

是否有人知道如何使用regex来查找和替换某些单词?

代码语言:javascript
运行
复制
<b>[Keyword]</b>

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

示例:

代码语言:javascript
运行
复制
Hello World!

关键词:

代码语言:javascript
运行
复制
Hello

输出:

代码语言:javascript
运行
复制
<b>Hello</b> World!
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-26 10:25:56

你可以试试这个:

代码语言:javascript
运行
复制
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);
    }
}
票数 8
EN

Stack Overflow用户

发布于 2019-03-07 10:00:36

您不需要任何lambda来重用替换模式中的整个匹配值,您可以使用$&反向引用引用整个匹配值。请参阅https://learn.microsoft.com/en-us/dotnet/standard/base-types/substitutions-in-regular-expressions

$&准相对应包括一个整个匹配的副本在替换字符串中。有关更多信息,请参见替换整场比赛

C#代码:

代码语言:javascript
运行
复制
var input = "Hello World!";
var keyword = "Hello";
var result = Regex.Replace(input, Regex.Escape(keyword), "<b>$&</b>");
Console.WriteLine(result);

在线C#演示

但是,上面的代码没有什么意义,因为您只需使用字符串.Replacevar result = input.Replace(keyword, $"<b>{keyword}</b>")就可以实现同样的目标。因此,下面是您想要使用regex的一些想法:

全词匹配

  • 规则的单词边界(如果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搜索时,可能需要这样的regex来确保替换字符串中关键字的大小写:

代码语言:javascript
运行
复制
Regex.Replace(input, Regex.Escape(keyword), "<b>$&</b>", RegexOptions.IgnoreCase)

请参阅另一个C#演示

代码语言:javascript
运行
复制
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!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18441420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档