gpt4 book ai didi

c# - 无法用包含 $0 的动态字符串替换文本

转载 作者:行者123 更新时间:2023-12-04 01:51:31 24 4
gpt4 key购买 nike

我正在使用 Regex 替换模板中的所有字符串。一切正常,直到出现我要替换的值,即 $0.00。我似乎无法将 $0 正确替换为替换文本。我得到的输出是 "Project Cost: [[ProjectCost]].00"。知道为什么吗?

这是一个带有一些简化变量的代码示例。

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;

using System.Security;
using System.Text.RegularExpressions;


namespace Export.Services
{
public class CommonExportService
{

private Dictionary<string, string> _formTokens;


public CommonExportService() {
_formTokens = {{"EstimatedOneTimeProjectCost", "0.00"}};
}


private string GetReplacementText(string replacementText)
{
replacementText = "Project Cost: [[EstimatedOneTimeProjectCost]]";
//replacement text = "Project Cost: [[ProjectCost]]"
foreach (var token in _formTokens)
{
var val = token.Value;
var key = token.Key;

//work around for now
//if (val.Equals("$0.00")) {
// val = "0.00";
//}

var reg = new Regex(Regex.Escape("[[" + key + "]]"));


if (reg.IsMatch(replacementText))
replacementText = reg.Replace(replacementText, SecurityElement.Escape(val ?? string.Empty));
else {

}
}

return replacementText;

//$0.00 does not replace, something is happening with the $0 before the decimal
//the output becomes Project Cost: [[EstimatedOneTimeProjectCost]].00


//The output is correct for these
//0.00 replaces correctly
//$.00 replaces correctly
//0 replaces correctly
//00 replaces correctly
//$ replaces correctly

}
}
}

最佳答案

由于替换字符串是动态构建的,因此您需要注意其中的 $ 字符。当 $ 后跟 0 时,$0 是对整个匹配项的反向引用,因此整个匹配项作为替换结果插入。

您只需要在文字字符串模式中对 $ 进行美元转义:

return replacementText.replace("$", "$$");

然后,您的替换模式将包含 $$0,并将“转换”为文字 $0 字符串。

关于c# - 无法用包含 $0 的动态字符串替换文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52807430/

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