替换字符串之间的字符

时间:2014-11-11 14:37:40

标签: c# regex string

在c#中,我试图替换两个给定字符串之间的任何字符串,主要是使用Regex。例如,如果我有:

TextBlock Text="this is a test"

然后我想将其更改为:

TextBlock Text="Any given string comes here"

为此,经过一些搜索,我尝试了这种方法:

Regex.Replace(inputString, @"(?<=TextBlock Text=\")(\w+?)(?=\")", "Any given string comes here");

但是我有很多错误,说&#34;非静态字段,方法或属性需要对象引用&#34;。有没有有效的方法来与正则表达式这样做?谢谢。

3 个答案:

答案 0 :(得分:1)

您的正则表达式中不需要(\w+?),而是需要使用:

([\w ]+)

匹配以空格分隔的单词。

或者更好的是你可以使用否定:

([^"]+)

这意味着匹配除双引号之外的任何内容的1个或多个字符。

您的代码将是:

Regex.Replace(inputString, 
      @"(?<=TextBlock Text="")([^""]+)(?="")", "Any given string comes here");

答案 1 :(得分:1)

看起来问题是你试图在逐字字符串中转义双引号。这不是它的完成方式:你需要在这些字符串中加倍双引号,如下所示:

@"(?<=TextBlock Text="")(\w+?)(?="")"

当你尝试使用斜杠转义双引号时,解析器会感到困惑,因为它将双引号视为字符串的结尾。它后面的字符会产生语法错误。

注意:如果出现此错误,请考虑修复正则表达式模式中的catastrophic backtracking问题。

答案 2 :(得分:1)

您有三个问题导致此操作无法正常工作。

  1. 您没有将替换物分配给任何东西。
  2. 您需要在模式中加倍双引号而不是转义它们。
  3. 您需要考虑单词之间的空格。

  4. String result = Regex.Replace(inputString, @"(?<=TextBlock Text="")[\w\s]+(?="")", "Any given string comes here");
    

    Ideone Demo