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
-美元符号\$
-与0个或多个字符(空格([^\s$]*
)和美元符号除外)匹配的否定字符类\s
-捕获组结束)
要包含第二个定界符,您可以使用
@([€$][^\s€$]*)”
尝试(\$\w+)
或(\$(?:\w+)(?:[^\s\w]+\w+)
(如果需要匹配,甚至可以使用(\$\s*)
)。当然,($\s*)
)似乎适合您。@WiktorStribiż为这个用例查看这些工作,但是如果我在之后放置$
,它们就不工作了。在这种情况下,我希望看到两个匹配项:$turn
和$.bak.orm
(\$[^\s$]*)
?看。@WiktorStribiżew真棒。这似乎奏效了。你能给出一个带解释的答案吗?另外,我想知道是否可以将其扩展为包含两个分隔符,例如$
和€
。