Regex.Split on“()”和“?”

时间:2013-09-27 17:51:31

标签: c# regex

myString= "First?Second Third";    
String[] result = Regex.Split(myString, @"( )\?");

应该结果: 第一, 第二, 第三

我错过了什么? (我还需要括号来分开其他东西)

4 个答案:

答案 0 :(得分:5)

我猜( ),你的意思是空白。你不需要任何捕获组。只需使用更改或字符类:

String[] result = Regex.Split(myString, @"\s|\?");

// OR
String[] result = Regex.Split(myString, @"[\s?]");

答案 1 :(得分:3)

使用字符串方法:

myString= "First?Second Third";
String[] result = myString.Split(' ','?');

答案 2 :(得分:1)

我不太确定你要用引号做什么。请记住,在C#括号中用于表示正则表达式中的逻辑组,它们不会转义空格。而是想要拆分一组明确的字符,用括号[]表示。您应该使用以下模式进行拆分:

String[] result = Regex.Split(myString, @"[\?\s]");

注意\?是一个逃脱的空间(正如你原来的那样)。空格字符转义为\ s。因此,我的解决方案实际上是说在任何明确指出的字符(基于[])上分隔字符串并将这些字符列为? (转义为\?)和“”(转义为\ s)。

从OP获得更多信息后编辑: 在回答了这篇文章后,我还看到你编辑了最高评论,说你想要一个白色空间的逻辑分组,在这种情况下我会选择:

String[] result = Regex.Split(myString, @"[\?(\s)]");

答案 3 :(得分:0)

您需要在[]内包围这些字符以创建一系列字符。 [\s\?]这将分开:

  1. 空格
  2. ?
  3. 您可以使用\s来处理“任何”空白字符。