在字符串之间替换字符串

本文关键字:字符串 替换 之间 | 更新日期: 2023-09-27 18:30:03

在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");

但我有很多错误,说"非静态字段、方法或属性需要对象引用"。Regex有什么有效的方法可以做到这一点吗?谢谢

在字符串之间替换字符串

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

(['w ]+)

匹配用空格分隔的单词。

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

([^"]+)

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

您的代码是:

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

问题似乎是您试图转义逐字字符串中的双引号。这不是怎么做的:你需要在这样的字符串中加倍你的双引号,就像这样:

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

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

注意:有了这个错误,可以考虑修复正则表达式模式中灾难性的回溯问题。

您有三个问题导致它无法按预期工作。

  1. 您没有将替代者分配给任何对象
  2. 你需要在你的模式中使用双引号,而不是转义
  3. 你需要考虑单词之间的空白

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

Ideone演示