【问题标题】:C# split string.format string with regexC# 使用正则表达式拆分 string.format 字符串
【发布时间】:2017-05-25 17:24:34
【问题描述】:

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

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

应该解析为 3 个字符串。

  • "字段需要设置为'"
  • "'当"
  • “,修复。现在!”

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

在上面的示例中,我将能够通过调用一个名为 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);               
  }
}

我宁愿使用正则表达式而不是使用子字符串的不优雅的方法。

【问题讨论】:

  • Like this? 然后在\n上拆分?
  • 是的,就像那样。谢谢

标签: c# regex split string.format


【解决方案1】:

我想你会想要Regex.Split

在正则表达式模式定义的位置处将输入字符串拆分为子字符串数组。

Regex.Split("{0} field needs to be set to '{1}' when {2},  Fixit.  NOW!", @"{\d+}");

应该输出:

["","field needs to be set to '","' when ",",  Fixit.  NOW!"]

【讨论】:

  • 当然.Where(s =&gt; !string.isNullOrWhitespace(s))
猜你喜欢
  • 2022-11-30
  • 2017-02-23
相关资源
最近更新 更多