用正则表达式和 C# 替换文本并没有按照我需要的方式工作

本文关键字:工作 方式 正则表达式 替换 并没有 文本 | 更新日期: 2023-09-27 18:22:15

我正在寻找一种方法来遍历字符串并替换所有实例,其中第二和第三个字符总是不同的,但其余的将是相同的。例如,如果我有:

"ú07ú" to be replaced with "ú07 ú" 
"ú1Eú" to be replaced with "ú1E ú"
"ú12ú" to be replaced with "ú12 ú"

我知道我应该使用正则表达式,但它们让我感到困惑。我很确定语法是这样的:

Content = Regex.Replace(Content, @"ú...", “ú.. ú");

但显然这是行不通的。请问任何正则表达式大师可以伸出援手吗?

谢谢

用正则表达式和 C# 替换文本并没有按照我需要的方式工作

看起来你想要:

Content = Regex.Replace(Content, @"ú([^ú]+)ú", @"ú$1 ú");

此正则表达式:

ú([^ú]+)ú 

意思是:匹配 ú,然后至少一个不是 ú 的字符(并捕获这部分(,然后是另一个 ú。如果希望它只匹配中间的两个字符,请将[^ú]+更改为[^ú]{2}

然后我们将整个内容替换为:

ú$1 ú
即:ú,然后是

字符串的捕获部分,然后是一个空格,然后再次是ú。

我对 C# 完全不熟悉,但从正则表达式的角度来看,您需要捕获组。

"呃..."需要是"(ú...(.)'"和"ú.ú" 需要为"$1 $2",假设 C# 使用标准正则表达式表示法来捕获组。

[TestMethod]
public void regex_test()
{
  string expr = @"(?<firstThree>.{3})(?<lastOne>.{1})";
  string replace = "${firstThree} ${lastOne}";
  string first = "u84u";
  string firstResult = "u84 u";
  Assert.AreEqual<string>(firstResult, Regex.Replace(first, expr, replace));
}