在字符串之间替换字符串
本文关键字:字符串 替换 之间 | 更新日期: 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+?)(?="")"
当您尝试用斜杠转义双引号时,解析器会感到困惑,因为它将双引号视为字符串的末尾。后面的字符会产生语法错误。
注意:有了这个错误,可以考虑修复正则表达式模式中灾难性的回溯问题。
您有三个问题导致它无法按预期工作。
- 您没有将替代者分配给任何对象
- 你需要在你的模式中使用双引号,而不是转义
- 你需要考虑单词之间的空白
String result = Regex.Replace(inputString, @"(?<=TextBlock Text="")['w's]+(?="")", "Any given string comes here");
Ideone演示