在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;。有没有有效的方法来与正则表达式这样做?谢谢。
答案 0 :(得分:1)
您的正则表达式中不需要(\w+?)
,而是需要使用:
([\w ]+)
匹配以空格分隔的单词。
或者更好的是你可以使用否定:
([^"]+)
这意味着匹配除双引号之外的任何内容的1个或多个字符。
您的代码将是:
Regex.Replace(inputString,
@"(?<=TextBlock Text="")([^""]+)(?="")", "Any given string comes here");
答案 1 :(得分:1)
看起来问题是你试图在逐字字符串中转义双引号。这不是它的完成方式:你需要在这些字符串中加倍双引号,如下所示:
@"(?<=TextBlock Text="")(\w+?)(?="")"
当你尝试使用斜杠转义双引号时,解析器会感到困惑,因为它将双引号视为字符串的结尾。它后面的字符会产生语法错误。
注意:如果出现此错误,请考虑修复正则表达式模式中的catastrophic backtracking问题。
答案 2 :(得分:1)
您有三个问题导致此操作无法正常工作。
String result = Regex.Replace(inputString, @"(?<=TextBlock Text="")[\w\s]+(?="")", "Any given string comes here");