C#正则表达式匹配具有分隔符的字符串

时间:2009-03-13 13:06:53

标签: c# regex parsing delimited-text

我需要一些正则表达式的帮助。 我想得到两个特定单词之间有分隔符的字符串。

e.g。 我需要一个匹配的正则表达式:

陈述1开始陈述2;陈述3结束了乐趣;

'start'和'end'之间可能会出现多次';'。

语句是多个单词,其中(。*)可以在正则表达式中用于单词。

但如果'start'和'end'之间没有';',则正则表达式不匹配。

此外,'end'应该是'start'之后遇到的第一个'end'

所以,正则表达式不应该匹配

陈述1开始陈述2结束陈述3;结束乐趣

我希望比赛为

  1. 在'start'之前的陈述
  2. 关键字
  3. 在'start'之后的陈述
  4. 所以,在这种情况下,它将是一个组(对于第一个字符串,因为第二个不匹配)  为:

    1. 声明1
    2. 启动
    3. 声明2;陈述3结束了乐趣;
    4. 感谢。

4 个答案:

答案 0 :(得分:1)

因此,下面的正则表达式将匹配您的正面情况并且未通过否定情况并将结果放入第1,2组和第1组中。 3。

(.*?) (start) ((?:(?:.*?) ;)+ (?:.*?) end fun)

如果您不熟悉(?:)语法 - 它们表示非捕获括号。 查看Mastering Regular Expressions,这是该主题的绝佳参考资料!

答案 1 :(得分:0)

start ((Statements) ;)+ (Statements) end fun

答案 2 :(得分:0)

可能更快使用

    string[] Strings = stringToSplit.Split(new char[] { ';' });
    if (Strings.Count() > 1)
    {
        // Do your stuff
    }

答案 3 :(得分:0)

这听起来像你想要的一样简单:

(.*)(start)(.*;.*end.*)

这会返回您列出的群组。