我使用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
括号中拆分{
以获得以下结果:
如果有空格,那么字符串会被分割(空格被删除),我得到了我想要的结果。但是如果没有空间我会在{
上拆分字符串,那么{
会被删除,但我不想要的。如何在不删除拆分条件字符的情况下使用Regex.Split()
?
答案 0 :(得分:4)
方括号创建一个字符集,因此您希望它与这些内部字符中的一个完全匹配。为了你的愿望,首先要删除它们。
为了匹配你必须添加*
空格的随机数,结果就是\s*
。
\s
是一个空格*
表示零或多如果您没有删除拆分条件字符,则可以使用前瞻断言(?=...)
。
(?=...)
或(?!...)
是一个先行断言合并后的Regex
如下所示:\s*(?={)
答案 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];
这意味着"在出现时分割(零个或多个空格后跟{)" - 所以拆分操作会占用你的空间(你想要的)和你的{(你不想要的),但是你可以确定地说它会意味着你会得到你想要的东西