C# 使用正则表达式拆分字符串:*类别**bob*!烹饪店
这就是我到目前为止一直在尝试的。基本上,我想分割字符串,但保留分隔符。我的正则表达式知识非常有限,但我一直在尝试使用正向查找来匹配表达式。每当我尝试在字符串拆分中引入C# 使用正则表达式拆分字符串:*类别**bob*!烹饪店,c#,regex,C#,Regex,这就是我到目前为止一直在尝试的。基本上,我想分割字符串,但保留分隔符。我的正则表达式知识非常有限,但我一直在尝试使用正向查找来匹配表达式。每当我尝试在字符串拆分中引入\*1时,结果都很糟糕,因此我不确定该怎么做,也不确定这是否可行 var tests = new List<string> { "*foo**bar*!bob", "*foo*!42", "!foo*bar*" }; foreach (var expression in tests) {
\*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));
}
第二行(这正按预期工作)
第三线
{EMPTY LINE}
!foo*bar*
!foo
*bar*
但我想回去的是:
一线
*foo*
*bar*
!bob
第二行-如上所述(这是正确的)
第三线
{EMPTY LINE}
!foo*bar*
!foo
*bar*
试试这个
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*