Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用分隔符将字符串拆分为子字符串,同时保留空格_C#_Regex_String_Whitespace - Fatal编程技术网

C# 使用分隔符将字符串拆分为子字符串,同时保留空格

C# 使用分隔符将字符串拆分为子字符串,同时保留空格,c#,regex,string,whitespace,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); }

我创建了一个正则表达式,用分隔符(
$
)分割字符串,但它没有按我想要的方式工作

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"

本质上,我希望通过
$
拆分字符串,并确保
$
显示在子字符串的开头,而不是其他地方(子字符串只显示
$
是可以的)。我还想确保保留第一个子字符串中的空白字符,但是任何匹配都不应该像第二和第四种情况那样包含空白字符。我不喜欢区分大小写。

似乎您希望使用一种模式进行拆分,该模式以一美元开头,然后除空格和美元字符外,还有任何0个或更多字符:

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

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


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

尝试
(\$\w+)
(\$(?:\w+)(?:[^\s\w]+\w+)
(如果需要匹配,甚至可以使用
(\$\s*)
)。当然,
($\s*)
)似乎适合您。@WiktorStribiż为这个用例查看这些工作,但是如果我在
之后放置
$
,它们就不工作了。在这种情况下,我希望看到两个匹配项:
$turn
$.bak.orm
(\$[^\s$]*)
?看。@WiktorStribiżew真棒。这似乎奏效了。你能给出一个带解释的答案吗?另外,我想知道是否可以将其扩展为包含两个分隔符,例如
$