C#split string.format string with regex

时间:2017-05-25 17:24:35

标签: c# regex split string.format

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

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

应该解析为3个字符串。

  • “字段需要设置为'”
  • “'when”
  • “,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);               
  }
}

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

1 个答案:

答案 0 :(得分:4)

我想你会想要Regex.Split

  

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

    <Viewbox Stretch="UniformToFill">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
                <RowDefinition Height="auto"/>
            </Grid.RowDefinitions>
            <Label x:Name="SportLabel" Content="Test" Foreground="Orange"/>
            <ScrollViewer x:Name="SV1" Grid.Row="1" ScrollViewer.VerticalScrollBarVisibility="Hidden">
                <DataGrid Name="dataGrid">
                    <DataGrid.Columns>
                        <DataGridTextColumn Binding="{Binding}"/>
                    </DataGrid.Columns>
                    <DataGrid.Items>
                        <sys:String>Test1</sys:String>
                        <sys:String>Test2</sys:String>
                        <sys:String>Test3</sys:String>
                        <sys:String>Test4</sys:String>
                    </DataGrid.Items>
                </DataGrid>
            </ScrollViewer>
        </Grid>
    </Viewbox>

应输出:

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