Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c正则表达式替换,但每次替换值不同_C#_.net_Regex - Fatal编程技术网

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解析器进行此操作。