gpt4 book ai didi

C# 使用字典替换正则表达式匹配的模式

转载 作者:行者123 更新时间:2023-11-30 21:40:45 30 4
gpt4 key购买 nike

我正在尝试替换我的字符串中的模式,其中只应替换标签之间的单词。需要替换的单词作为键值对存在于字典中。

目前这就是我正在尝试的:

string input = "<a>hello</a> <b>hello world</b> <c>I like apple</c>";
string pattern = (@"(?<=>)(.)?[^<>]*(?=</)");
Regex match = new Regex(pattern, RegexOptions.IgnoreCase);
MatchCollection matches = match.Matches(input);

var dictionary1 = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
dictionary1.Add("hello", "Hi");
dictionary1.Add("world", "people");
dictionary1.Add("apple", "fruit");

string output = "";

output = match.Replace(input, replace => { return dictionary1.ContainsKey(replace.Value) ? dictionary1[replace.Value] : replace.Value; });
Console.WriteLine(output);
Console.ReadLine();

使用它,它确实会替换第一个“hello”而不是第二个。我想替换标签之间每次出现的“你好”。

任何帮助将不胜感激。

最佳答案

问题是匹配项是:

  • 你好
  • Hello World
  • 我喜欢苹果

例如hello world 不在你的字典里。

根据您的代码,这可能是一个解决方案:

using System;
using System.Text.RegularExpressions;
using System.Collections.Generic;

public class Program
{
public static void Main()
{
var dictionary1 = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
dictionary1.Add("hello", "Hi");
dictionary1.Add("world", "people");
dictionary1.Add("apple", "fruit");


string input = "<a>hello</a> <b>hello world</b> <c>I like apple</c>";
string pattern = ("(?<=>)(.)?[^<>]list|" + GetKeyList(dictionary1) + "(?=</)");
Regex match = new Regex(pattern, RegexOptions.IgnoreCase);
MatchCollection matches = match.Matches(input);

string output = "";

output = match.Replace(input, replace => {
Console.WriteLine(" - " + replace.Value);

return dictionary1.ContainsKey(replace.Value) ? dictionary1[replace.Value] : replace.Value;
});
Console.WriteLine(output);
}

private static string GetKeyList(Dictionary<string, string> list)
{
return string.Join("|", new List<string>(list.Keys).ToArray());
}
}

fiddle :https://dotnetfiddle.net/zNkEDv

如果有人想深入研究这个,请告诉我为什么我需要一个“列表|”在列表中(因为第一项被忽略),我将不胜感激。

关于C# 使用字典替换正则表达式匹配的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44311565/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com