Regex。使用分隔符将字符串拆分为子字符串,同时保留空白

时间:2019-03-29 21:56:01

标签: c# regex string whitespace

我创建了一个正则表达式,以用定界符($)分割字符串,但是它不能按照我想要的方式工作。

var str = "sfdd fgjhk fguh      $turn.bak.orm $hahr*____f";
var list = Regex.Split(str, @"(\$\w+)").Where(x => !string.IsNullOrEmpty(x)).ToList();

foreach (var item in list)
{
    Console.WriteLine(item);
}

输出:

"sfdd fgjhk fguh      "
"$turn"
".bak.orm "
"$hahr"
"*____f"

问题是\w+与任何句点或星号都不匹配。这是我想要的输出:

"sfdd fgjhk fguh      "
"$turn.bak.orm"
" "
"$hahr*____f"

本质上,我想用$分割字符串,并确保$出现在子字符串的开头,并且没有其他地方(子字符串只能是$可以) 。我还想确保将空格字符保留在第一个子字符串中,但是任何匹配项都不应像在第二和第四种情况中那样包含空格。我不在乎区分大小写。

1 个答案:

答案 0 :(得分:1)

您似乎想使用以美元开头的模式进行拆分,然后使用除空格和美元字符以外的0个或多个字符:

var list = Regex.Split(s, @"(\$[^\s$]*)")
        .Where(x => !string.IsNullOrEmpty(x))
        .ToList();

详细信息

  • (-捕获组的开始(以便Regex.Split对字符串进行标记,可以将匹配项保留在结果数组中)
    • \$-美元符号
    • [^\s$]*-否定的字符类,匹配除空格(\s)和美元符号之外的0个或更多字符
  • )-捕获组的结尾。

请参见regex demo

enter image description here

要包括第二个定界符,可以使用@"([€$][^\s€$]*)"