这是我到目前为止所尝试的内容。基本上,我想拆分字符串,但保持分隔符。我的正则表达式知识非常有限,但我一直在尝试使用正向查找来匹配表达式。每当我尝试将\*1
引入字符串拆分时,它就会变坏,所以我不知道该怎么办,如果可能的话。
var tests = new List<string>
{
"*foo**bar*!bob",
"*foo*!42",
"!foo*bar*"
};
foreach (var expression in tests)
{
var strings = Regex.Split(expression, @"(?=[!])");
Console.WriteLine(String.Join(Environment.NewLine, strings));
}
第1行:
*foo**bar*
!bob
第二行(这是按预期工作)
*foo*
!42
第3行
{EMPTY LINE}
!foo*bar*
但我尝试回来是:
第1行
*foo*
*bar*
!bob
第二行 - 如上(这是正确的)
第3行
!foo
*bar*
答案 0 :(得分:2)
试试这个......
var tests = new List<string>
{
"*foo**bar*!bob",
"*foo*!42",
"!foo*bar*"
};
foreach (var expression in tests)
{
var strings = Regex.Split(expression, @"(?=[!])|(\*[^\*]+\*)").Where(exp => !String.IsNullOrEmpty(exp));
Console.WriteLine(String.Join(Environment.NewLine, strings));
}
结果:
*foo*
*bar*
!bob
*foo*
!42
!foo
*bar*