C# 正则表达式 split() 不删除分割条件字符

L. *_*rdt 2 c# regex string split

我正在string使用正则表达式的Split()方法来拆分 a 。

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);
Run Code Online (Sandbox Code Playgroud)

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

  • /测试/显示消息
  • { '文本': 'foo' }

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

小智 6

方括号创建一个字符集,因此您希望它与这些内部字符之一完全匹配。为了满足您的愿望,请从删除它们开始。

因此,为了匹配它,您必须添加随机数量*的空格,结果就是这个\s*

  • \s是一个空格
  • *意味着零个或多个

如果您不删除分割条件字符,则可以使用先行断言(?=...)

  • (?=...)或者(?!...)是一个前瞻断言

组合后Regex看起来像这样:\s*(?={)

是所有不同部分的非常好的详细文档Regex,您可以看一下。此外,您可以在这里Regex轻松免费地测试您的功能。