使用正则表达式拆分字符串:* category ** bob *!cookshop

时间:2015-06-24 19:35:46

标签: c# regex

这是我到目前为止所尝试的内容。基本上,我想拆分字符串,但保持分隔符。我的正则表达式知识非常有限,但我一直在尝试使用正向查找来匹配表达式。每当我尝试将\*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*

1 个答案:

答案 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*