使用正则表达式搜索和替换方法

Search and replace method using regular expressions

我正在寻找一个正则表达式来实现搜索和替换方法,该方法在较长的文本(例如“This is a /Sample Text: in a sentence”)中识别类似“/Sample Text:”的字符串,其中可以指定 'Match whole word' and/or 'Match case'。我是正则表达式的新手。非常感谢。

我尝试了类似下面的方法,但这不是我所期望的:

var text = "This is a /Sample Text: in a sentence";
var oldValue = "/Sample Text:";
var newValue = "sample text";
var result = Regex.Replace(text, $"\b{oldValue}{(char.IsPunctuation(newValue[newValue.Length - 1]) ? "(?!\" + newValue[newValue.Length - 1] + ")" : string.Empty)}", newValue, RegexOptions.CultureInvariant);

看起来“words”可以在“word”中的任何位置包含任何特殊字符。在这种情况下,您需要

  • 转义oldValue“单词”
  • 使用动态 .

看到一个 example C# demo:

var text = "This is a /Sample Text: in a sentence";
var oldValue = "/Sample Text:";
var newValue = "sample text";
var matchCase = RegexOptions.IgnoreCase;
var result = Regex.Replace(text, $@"(?!\B\w){Regex.Escape(oldValue)}(?<!\w\B)", newValue, matchCase);

result 值为 This is a sample text in a sentence

(?!\B\w){Regex.Escape(oldValue)}(?<!\w\B)表示

  • (?!\B\w) - 仅当后面的字符是单词 char
  • 时才以单词边界开头的位置
  • {Regex.Escape(oldValue)} - 一个内插字符串变量,它是 oldValue
  • 的转义值
  • (?<!\w\B) - 仅当前面的字符是单词字符时,后跟单词边界的位置。