Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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# 使用正则表达式拆分字符串:*类别**bob*!烹饪店_C#_Regex - Fatal编程技术网

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*