C# c正则表达式替换,但每次替换值不同
我有这样一个字符串:C# c正则表达式替换,但每次替换值不同,c#,.net,regex,C#,.net,Regex,我有这样一个字符串: <div> <query>select * from table1</query> </div> <div> <query>select * from table2</query> </div> 这是一个模板用例。每个查询都将替换为不同的值,即SQL结果。是否可以使用正则表达式替换方法来执行此操作 我想到的解决方案是在第一个过程中使用Regex.Match,收集所有匹配项,然后
<div>
<query>select * from table1</query>
</div>
<div>
<query>select * from table2</query>
</div>
这是一个模板用例。每个查询都将替换为不同的值,即SQL结果。是否可以使用正则表达式替换方法来执行此操作
我想到的解决方案是在第一个过程中使用Regex.Match,收集所有匹配项,然后在第二个过程中使用string.replace逐个替换匹配项。有更好的方法来解决这个问题吗?我们知道正则表达式不适合html解析,但我认为您不需要在这里解析html,只需获取xxx模式中的内容即可。 因此,文档的其余部分是什么并不重要,因为您不想遍历它,也不想验证或更改,这与您的问题无关 因此,在这种情况下,我将使用正则表达式而不是html解析器:
var pattern = "<query>.+<\/query>";
然后用字符串替换方法替换每个匹配项我们知道正则表达式不适合html解析,但我认为您不需要在这里解析html,只需获取xxx模式中的内容即可。 因此,文档的其余部分是什么并不重要,因为您不想遍历它,也不想验证或更改,这与您的问题无关 因此,在这种情况下,我将使用正则表达式而不是html解析器:
var pattern = "<query>.+<\/query>";
然后用字符串替换方法替换每个匹配项您可以使用该方法首先获取查询标记,并用所需的内容替换内部文本:
var html = new HtmlDocument();
html.Load(filepath);
var queries = html.DocumentNode.SelectNodes("//query");
foreach(var node in queries)
{
if(node.InnerText=="select * from table1")
{
node.InnerText="your result";
}
}
您还可以使用字典将模式另存为键,将替换项另存为值:
var dict = new Dictionary<string, string>();
dict.Add("select * from table1","your result");
//...
var html = new HtmlDocument();
html.Load(filepath);
var queries = html.DocumentNode.SelectNodes("//query");
foreach(var node in queries)
{
if(dict.Keys.Contains(node.InnerText))
{
node.InnerText=dict[node.InnerText];
}
}
您可以使用获取第一个查询标记,并用所需内容替换内部文本:
var html = new HtmlDocument();
html.Load(filepath);
var queries = html.DocumentNode.SelectNodes("//query");
foreach(var node in queries)
{
if(node.InnerText=="select * from table1")
{
node.InnerText="your result";
}
}
您还可以使用字典将模式另存为键,将替换项另存为值:
var dict = new Dictionary<string, string>();
dict.Add("select * from table1","your result");
//...
var html = new HtmlDocument();
html.Load(filepath);
var queries = html.DocumentNode.SelectNodes("//query");
foreach(var node in queries)
{
if(dict.Keys.Contains(node.InnerText))
{
node.InnerText=dict[node.InnerText];
}
}
如果结构是HTML,则可以使用HTML解析器进行此操作。如果结构是HTML,则可以使用HTML解析器进行此操作。