我只想替换与给定文本匹配的字符串的一部分。 我的用例如下:
var text = "<wd:response><wd:response-data></wd:response-data></wd:response >";
string result = text.Replace("wd:response", "response");
/*
* expecting the below text
<response><wd:response-data></wd:response-data></response>
*
*/
我遵循以下答案:
Way to have String.Replace only hit "whole words"
Regular expression for exact match of a string
但是我没有达到我想要的。
请分享您的想法/解决方案。
答案 0 :(得分:0)
通常,您应该使用知道XML的工作原理和语言合法性的函数来真正地将XML as 解析和处理。正则表达式和其他幼稚的文本操作通常会给您带来麻烦。
也就是说,对于此特定于 问题的非常简单的解决方案,您可以通过以下两个替换操作来实现:
var text = "<wd:response><wd:response-data></wd:response-data></wd:response >";
text.Replace("wd:response>", "response>").Replace("wd:response ", "response ")
(请注意第二个替换参数末尾的空格。)
或者使用类似于"wd:response\s*>"
的正则表达式
答案 1 :(得分:0)
您可以捕获字符串wd-response
in a capturing group
并使用Regex.Replace
使用MatchEvaluator
进行替换,就像这样。
正则表达式说明-<[/]?(wd:response)[\s+]?>
<
/
,因此匹配?
wd:response
,并将其放入()
包围的捕获组中[\s+]?
>
public class Program
{
public static void Main(string[] args)
{
string text = "<wd:response><wd:response-data></wd:response-data></wd:response >";
string replacePattern = "response";
string pattern = @"<[/]?(wd:response)[\s+]?>";
string replacedPattern = Regex.Replace(text, pattern, match =>
{
// Extract the first group
Group group = match.Groups[1];
// Replace the group value with the replacePattern
return string.Format("{0}{1}{2}", match.Value.Substring(0, group.Index - match.Index), replacePattern, match.Value.Substring(group.Index - match.Index + group.Length));
});
Console.WriteLine(replacedPattern);
}
}
输出:
<response><wd:response-data></wd:response-data></response >
答案 2 :(得分:0)
按照.net小提琴获得结果的最简单方法是使用以下替换。
字符串结果= text.Replace(“ wd:response>”,“ response>”);
但是实现这一目标的正确方法是使用XML进行解析