基于正则表达式[]。[]和[]。[]从[]。[] + []。[]中分割字符串

时间:2016-06-23 07:02:59

标签: c# .net regex asp.net-mvc

我需要根据某些条件拆分String。

这是我的输入字符串

  

“([abcd_1]。[专栏] + [ab_cd_2]。[专栏])/ [ab_cd_3]。[专栏]”

输入字符串只包含

  

A-Z a-z下划线(_)和数字(0-9)

我想要的是

  

[abcd_1]。[专栏]

     

[ab_cd_2]。[专栏]

     

[ab_cd_3]。[柱]

我不确定我必须使用什么条件。

直到现在我尝试了这个但是无法构建正则表达式来分割精确的字符串

    Regex rgx = new Regex(@"\[(.*?)\]");
    String regexpString = "([abcd_1].[column] + [ab_cd_2].[column]) / [ab_cd_3].[column]";
    MatchCollection mc = rgx.Matches(regexpString);

请在此建议

1 个答案:

答案 0 :(得分:3)

您可以使用

\[[^][]*](?:\.\[[^][]*])*

请参阅regex demo

或者懒惰点的方式:\[.*?](?:\.\[.*?])*

关键是你可以添加一个带有.的非捕获组和你的初始模式,并对其应用*(零或更多)量词。

这是C# demo

Regex rgx = new Regex(@"\[.*?](?:\.\[.*?])*");
String input = "([abcd_1].[column] + [ab_cd_2].[column]) / [ab_cd_3].[column]";
MatchCollection matches = rgx.Matches(input);
foreach (Match m in matches)
        Console.WriteLine(m.Value);

模式说明

  • \[ - 文字[
  • [^][]* - 除[ ]以外的零个或多个字符(可以替换为.*? - 除了{0}以外的零个或多个字符换行,但尽可能少地返回有效的匹配)
  • ] - 一个文字](没有必要在char类之外逃避它,但你可以)
  • (?:\.\[[^][]*])* - 零或更多(最后*)的出现((?:...)用于对下面的子模式进行分组):
    • \. - 一个文字点(必须在字符类[...]之外转义)
    • \[ - [
    • [^][]* - 除[ ]
    • 以外的零个或多个字符
    • ] - ]