用RegEx和C#替换文本并不像我需要的那样工作

时间:2012-01-31 22:43:06

标签: c# regex string

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

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

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

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

但显然这不起作用。任何RegEx大师能帮忙吗?

由于

3 个答案:

答案 0 :(得分:4)

看起来你想要:

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

这个正则表达式:

ú([^ú]+)ú 

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

然后我们用以下内容替换整个事物:

ú$1 ú

这是:ú,然后是捕获的字符串部分,然后是空格和ú再次。

答案 1 :(得分:0)

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

“ú...”需要“(ú...)(。)”和“ú..ú”需要为“$ 1 $ 2”,假设C#使用标准正则表达式来捕获组。

答案 2 :(得分:0)

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