C# 用正则表达式拆分 string.format 字符串

标签 c# regex split string.format

我希望能够在变量的位置指示符上拆分格式字符串。它将切掉花括号和它们之间指示数字的位置。
所以,字符串:

string format = "{0} field needs to be set to '{1}' when {2},  Fixit.  NOW!";

应该解析为 3 个字符串。

  • "字段需要设置为'"
  • "'当"
  • ", Fixit。现在!"

我们使用类似于上述“格式”的字符串来构建错误消息。我的目标是添加可以接受格式的通用单元测试,并验证是否生成了与预期格式匹配的错误消息。由于错误生成代码和单元测试都引用相同的格式,因此在对消息进行微小更改时不需要更新单元测试。

在上面的示例中,我将能够通过调用名为 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!"]

关于C# 用正则表达式拆分 string.format 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44186351/

相关文章:

c# - Console.Read 被忽略

c# - 将多个通用接口(interface)传递给一个方法

r - 将一列包含确切信息的列拆分为两列

java - 当我尝试拆分句子时出现错误

c# - 如何在统一C#中永远使当前场景静音

C#:计算 iEnumerable 对象

c - pcre C API 只返回第一个匹配项

php - 如何转义 preg_match 模式中的斜杠字符?

regex - 使用 [regex] 从 URL 列表中获取带扩展名的 grep 文件名

string - SWI-Prolog : splitting text atom into list of characters