C# 用正则表达式拆分 string.format 字符串
C# split string.format string with regex
我希望能够在变量的位置指示符上拆分格式字符串。它将切掉花括号和它们之间指示数字的位置。
所以,字符串:
string format = "{0} field needs to be set to '{1}' when {2}, Fixit. NOW!";
应解析为 3 个字符串。
- ”字段需要设置为“”
- "' 当"
- ", Fixit。现在!"
我们使用类似上面的字符串 'format' 来构建错误消息。我的目标是添加可以接受格式的通用单元测试,并验证是否生成了与预期格式匹配的错误消息。由于错误生成代码和单元测试都引用相同的格式,因此在对消息进行微小更改时不需要更新单元测试。
在上面的示例中,我将能够通过调用名为 SplitFormatString 的新方法来测试预期结果。
string fieldName = "UserName";
string expectedValue = "Bob";
string condition = "excellence is a must";
string errorMessage = TestFieldValueErrorCase( );
AssertStringContainsAllThese(errorMessage, SplitFormatString(format), fieldName, expectedValue,condition);
有验证
public static void AssertStringContainsAllThese(string msg, string[] formatChunks, params string[] thingsToFind)
{
foreach (var txt in formatChunks.Concat(thingsToFind))
{
Assert.IsTrue(msg.Contains(txt), "Could not find <<" + txt + ">> in msg >>> " + msg);
}
}
我宁愿使用正则表达式,也不愿使用不雅的子字符串方法。
我想你会想要Regex.Split
Splits an input string into an array of substrings at the positions defined by a regular expression pattern.
Regex.Split("{0} field needs to be set to '{1}' when {2}, Fixit. NOW!", @"{\d+}");
应该输出:
["","field needs to be set to '","' when ",", Fixit. NOW!"]
我希望能够在变量的位置指示符上拆分格式字符串。它将切掉花括号和它们之间指示数字的位置。
所以,字符串:
string format = "{0} field needs to be set to '{1}' when {2}, Fixit. NOW!";
应解析为 3 个字符串。
- ”字段需要设置为“”
- "' 当"
- ", Fixit。现在!"
我们使用类似上面的字符串 'format' 来构建错误消息。我的目标是添加可以接受格式的通用单元测试,并验证是否生成了与预期格式匹配的错误消息。由于错误生成代码和单元测试都引用相同的格式,因此在对消息进行微小更改时不需要更新单元测试。
在上面的示例中,我将能够通过调用名为 SplitFormatString 的新方法来测试预期结果。
string fieldName = "UserName";
string expectedValue = "Bob";
string condition = "excellence is a must";
string errorMessage = TestFieldValueErrorCase( );
AssertStringContainsAllThese(errorMessage, SplitFormatString(format), fieldName, expectedValue,condition);
有验证
public static void AssertStringContainsAllThese(string msg, string[] formatChunks, params string[] thingsToFind)
{
foreach (var txt in formatChunks.Concat(thingsToFind))
{
Assert.IsTrue(msg.Contains(txt), "Could not find <<" + txt + ">> in msg >>> " + msg);
}
}
我宁愿使用正则表达式,也不愿使用不雅的子字符串方法。
我想你会想要Regex.Split
Splits an input string into an array of substrings at the positions defined by a regular expression pattern.
Regex.Split("{0} field needs to be set to '{1}' when {2}, Fixit. NOW!", @"{\d+}");
应该输出:
["","field needs to be set to '","' when ",", Fixit. NOW!"]