C#Regex split()而不删除拆分条件字符

时间:2017-11-15 13:41:31

标签: c# regex string split

我使用string方法将Split()与正则表达式分开。

var splitRegex = new Regex(@"[\s|{]");

string input = "/Tests/ShowMessage { 'Text': 'foo' }";

//second version of the input: 
//string input = "/Tests/ShowMessage{ 'Text': 'foo' }";

string[] splittedText = splitRegex.Split(input, 2);

string只是输入的示例模式。 input有两种不同的结构,一种在{之前有空格或没有空格。我想在input括号中拆分{以获得以下结果:

  • /测试/ ShowMessage
  • {'Text':'foo'}

如果有空格,那么字符串会被分割(空格被删除),我得到了我想要的结果。但是如果没有空间我会在{上拆分字符串,那么{会被删除,但我不想要的。如何在不删除拆分条件字符的情况下使用Regex.Split()

3 个答案:

答案 0 :(得分:4)

方括号创建一个字符集,因此您希望它与这些内部字符中的一个完全匹配。为了你的愿望,首先要删除它们。

为了匹配你必须添加*空格的随机数,结果就是\s*

  • \s是一个空格
  • *表示零或多

如果您没有删除拆分条件字符,则可以使用前瞻断言(?=...)

  • (?=...)(?!...)是一个先行断言

合并后的Regex如下所示:\s*(?={)

This是关于所有不同Regex部分的非常详细的文档,您可以查看它。此外,您可以轻松测试Regex免费here

答案 1 :(得分:1)

为了不在比赛中加入花括号,你可以把它放在前面看

\s*(?={)

这将匹配任何数量的空白区域,直到打开大括号之前的位置。

答案 2 :(得分:0)

您可以使用常规字符串拆分," {"并修剪空间:

var bits = "/Tests/ShowMessage { 'Text': 'foo' }".Split("{", StringSplitOptions.RemoveEmptyEntries);
bits[0] = bits[0].TrimEnd();
bits[1] = "{" + bits[1];

如果您想使用RegEx路线,可以添加{返回,如果您稍微更改正则表达式:

var splitRegex = new Regex(@"\s*{");

string input = "/Tests/ShowMessage { 'Text': 'foo' }";

//second version of the input: 
//string input = "/Tests/ShowMessage{ 'Text': 'foo' }";

string[] splittedText = splitRegex.Split(input, 2);
splittedText[1] = "{" + splittedText[1];

这意味着"在出现时分割(零个或多个空格后跟{)" - 所以拆分操作会占用你的空间(你想要的)和你的{(你不想要的),但是你可以确定地说它会意味着你会得到你想要的东西