为什么在正则表达式上分割时Regex.Split保留定界符

时间:2019-05-09 14:00:20

标签: c# string split delimiter

我有以下代码在正则表达式上拆分字符串:

if (\is_float($value)) {
    $repr = (string) $value;
    if (is_infinite($value)) {
        $repr = str_ireplace('INF', '.Inf', $repr);
    } elseif (floor($value) == $value && $repr == $value) {
        // Preserve float data type since storing a whole number will result in integer value.
        $repr = '!!float '.$repr;
    }
} else {
    $repr = \is_string($value) ? "'$value'" : (string) $value;
}

应该拆分并保留:

string s = "test;3 régred"; string[] authorsList = Regex.Split(s, "(\\s+)|([\\p{P}\\p{S}])"); foreach (string q in authorsList) { Console.WriteLine(q); } test 3

但是它正在存储

régred test ; 3 *space*

为什么不丢失定界符?

1 个答案:

答案 0 :(得分:3)

您使用(...)将分隔符放入捕获组。删除它们,它将正常工作:

string[] authorsList = Regex.Split(s, @"\s+|[\p{P}\p{S}]");

输出:

  

测试
  3
  régred

inverse question

供参考