C# 用变量替换文本文件中存储的字符串中的占位符
我在C#和.NetCore中有一个Windows UWP应用程序。我有一种特殊类型的打印机,需要发送特定字符串来打印标签。因此,我将标签定义/格式存储在单独的文本文件中。当应用程序加载并尝试打印时,我读取文本文件并加载字符串。然而,当我读入这个字符串时,其中有一些变量需要用实际数据替换。目前,我正在使用占位符并用大括号突出显示它们。然而,如果这更容易的话,我可以使用帕伦斯或其他东西。另外,我知道使用string.Format,您通常会用数字来枚举要在大括号中替换的变量,但我选择使用单词来提高定义文本文件的可读性 因此,当我从文本文件中获取原始字符串并对其进行解析(并将其存储在我的类属性中)后,这里就是原始字符串 ^XA ^LL300 ^FO125575 ^A0R,30,30 ^FDRecipient:{Recipient} ^财政司司长 ^FO175575 ^A0R,30,30 ^FDM/S:{EmpMail} ^财政司司长 ^FO275575 ^A0R,30,30 ^FDTelephone:{emphone} ^财政司司长 ^FO350575 ^A0R,30,30 ^FDProcessed:{DateTime.Now} ^财政司司长 ^FO290210 ^B7R,8,5,7,21,N ^FD{EmpNum} ^财政司司长 ^XZ 在这里,您可以看到五个左右的变量占位符,在花括号中,我想用真实数据替换它们 问题是,如何获取现在存储在类中的属性中的字符串,并用数据替换所有占位符 这里是我到目前为止掌握的一些情况。我没有得到任何例外,但它实际上并没有像它应该的那样替换数据。例如,下面的代码示例应该将{DateTime.Now}替换为实际的DateTime.Now},但是现在没有,我仍然可以看到我的占位符C# 用变量替换文本文件中存储的字符串中的占位符,c#,.net,windows-10-universal,C#,.net,Windows 10 Universal,我在C#和.NetCore中有一个Windows UWP应用程序。我有一种特殊类型的打印机,需要发送特定字符串来打印标签。因此,我将标签定义/格式存储在单独的文本文件中。当应用程序加载并尝试打印时,我读取文本文件并加载字符串。然而,当我读入这个字符串时,其中有一些变量需要用实际数据替换。目前,我正在使用占位符并用大括号突出显示它们。然而,如果这更容易的话,我可以使用帕伦斯或其他东西。另外,我知道使用string.Format,您通常会用数字来枚举要在大括号中替换的变量,但我选择使用单词来提高定义
private string replacePrintStringVariablesWithValues()
{
var finalPrintString = this.labelString;
//Below we will check for and replace all of the possible variables to the print string.
//TODO: we will need to refine/add more to this as labels are created. I tried to capture most now.
if (labelString.Contains(LabelDateTime))
{
finalPrintString = ReplaceWholeWord(finalPrintString, LabelDateTime, DateTime.Now.ToString());
}
return finalPrintString;
}
/// <summary>
/// Uses regex '\b' as suggested in //http://stackoverflow.com/questions/6143642/way-to-have-string-replace-only-hit-whole-words
/// </summary>
/// <param name="original"></param>
/// <param name="wordToFind"></param>
/// <param name="replacement"></param>
/// <param name="regexOptions"></param>
/// <returns></returns>
private static string ReplaceWholeWord(string completeString, string variableToReplace,
string replacement, RegexOptions regexOptions = RegexOptions.IgnoreCase)
{
var pattern = string.Format(@"\b{0}\b", variableToReplace);
var ret = Regex.Replace(completeString, pattern, replacement, regexOptions);
return ret;
}
//
///按照中的建议使用正则表达式“\b”//http://stackoverflow.com/questions/6143642/way-to-have-string-replace-only-hit-whole-words
///
///
///
///
///
///
私有静态字符串替换wholeword(字符串completeString,字符串变量toreplace,
字符串替换,RegexOptions RegexOptions=RegexOptions.IgnoreCase)
{
var pattern=string.Format(@“\b{0}\b”,variableToReplace);
var ret=Regex.Replace(completeString、pattern、replacement、regexOptions);
返回ret;
}
元字符
\b
匹配字类字符和非字类字符之间的零宽度边界
{
和}
不是词类字符。所以你的模式不起作用
删除
\b
或将其替换为\s
元字符\b
匹配字类字符和非字类字符之间的零宽度边界
{
和}
不是词类字符。所以你的模式不起作用
删除
\b
或将其替换为\s
我没有尝试执行这些操作,但我只是从两端删除了\b,并且成功了。非常感谢。我没有尝试执行\s,但我只是从两端删除了\b,并且成功了。非常感谢。