我创建了一个正则表达式,以用定界符($
)分割字符串,但是它不能按照我想要的方式工作。
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 :(得分:1)
您似乎想使用以美元开头的模式进行拆分,然后使用除空格和美元字符以外的0个或多个字符:
var list = Regex.Split(s, @"(\$[^\s$]*)")
.Where(x => !string.IsNullOrEmpty(x))
.ToList();
详细信息
(
-捕获组的开始(以便Regex.Split
对字符串进行标记,可以将匹配项保留在结果数组中)
\$
-美元符号[^\s$]*
-否定的字符类,匹配除空格(\s
)和美元符号之外的0个或更多字符)
-捕获组的结尾。请参见regex demo:
要包括第二个定界符,可以使用@"([€$][^\s€$]*)"
。