gpt4 book ai didi

regex - 想要在 Regex.Replace 调用期间编码文本

转载 作者:行者123 更新时间:2023-12-04 23:11:39 25 4
gpt4 key购买 nike

我有一个需要帮助的正则表达式调用。

我还没有发布我的正则表达式,因为它在这里不相关。
我想要做的是,在替换期间,我还想通过对影响正则表达式的整个文本执行 Html.Encode 来修改 ${test} 部分。

基本上,将正则表达式范围内的整个文本用粗体标记包裹起来,而且还要对粗体标记之间的文本进行 Html.Encode。

RegexOptions regexOptions = RegexOptions.Compiled | RegexOptions.IgnoreCase;
text = Regex.Replace(text, regexBold, @"<b>${text}</b>", regexOptions);

最佳答案

有一种非常简单的方法可以做到这一点(在 .net 中)。它被称为 MatchEvaluator,它可以让您进行各种很酷的查找和替换。本质上,您只需向 Regex.Replace 方法提供返回字符串并接受 Match 对象作为其唯一参数的方法的方法名称。对您的特定匹配(html 编码)执行任何有意义的操作,您返回的字符串将替换输入字符串中匹配的整个文本。

示例:假设您想找到添加两个数字的所有位置(在文本中),并且您想用实际数字替换表达式。你不能用严格的正则表达式方法来做到这一点,但是当你加入一个 MatchEvaluator 时,它就变得容易了。

public void Stuff()
{
string pattern = @"(?<firstNumber>\d+)\s*(?<operator>[*+-/])\s*(?<secondNumber>\d+)";
string input = "something something 123 + 456 blah blah 100 - 55";
string output = Regex.Replace(input, pattern, MatchMath);
//output will be "something something 579 blah blah 45"
}

private static string MatchMath(Match match)
{
try
{
double first = double.Parse(match.Groups["firstNumber"].Value);
double second = double.Parse(match.Groups["secondNumber"].Value);
switch (match.Groups["operator"].Value)
{
case "*":
return (first * second).ToString();
case "+":
return (first + second).ToString();
case "-":
return (first - second).ToString();
case "/":
return (first / second).ToString();
}
}
catch { }
return "NaN";
}

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator.aspx 上了解更多信息

关于regex - 想要在 Regex.Replace 调用期间编码文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46719/

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