代码之家  ›  专栏  ›  技术社区  ›  Ronald Wildenberg

regex拆分字符串,但保留分隔符

  •  8
  • Ronald Wildenberg  · 技术社区  · 15 年前

    我想做一个 Regex.Split 在一些分离器上,但我想保留分离器。举一个我正在尝试的例子:

    "abc[s1]def[s2][s3]ghi" --> "abc", "[s1]", "def", "[s2]", "[s3]", "ghi"
    

    我想到的正则表达式是 new Regex("\\[|\\]|\\]\\[") . 但是,这给了我以下信息:

    "abc[s1]def[s2][s3]ghi" --> "abc", "s1", "def", "s2", "", "s3", "ghi"
    

    分隔符消失了(考虑到我的regex,这是有意义的)。有没有一种方法来编写regex以便保留分隔符本身?

    2 回复  |  直到 15 年前
        1
  •  11
  •   Community Mohan Dere    8 年前

    使用零长度机器查找;您要拆分

    (?=\[)|(?<=\])
    

    也就是说,在任何地方,我们断言一个文本的匹配 [ 前面,或者我们断言一个文本匹配的地方 ] 在后面。

    作为C字符串文字,这是

    @"(?=\[)|(?<=\])"
    

    也见

    相关问题


    Java中的实例

        System.out.println(java.util.Arrays.toString(
            "abc[s1]def[s2][s3]ghi".split("(?=\\[)|(?<=\\])")
        ));
        // prints "[abc, [s1], def, [s2], [s3], ghi]"
    
        System.out.println(java.util.Arrays.toString(
            "abc;def;ghi;".split("(?<=;)")
        ));
        // prints "[abc;, def;, ghi;]"
    
        System.out.println(java.util.Arrays.toString(
            "OhMyGod".split("(?=(?!^)[A-Z])")
        ));
        // prints "[Oh, My, God]"
    
        2
  •  1
  •   kennytm    15 年前

    你可以使用 .Matches 而不是 .Split 实例 http://www.ideone.com/gUjRM ):

    string x = "abc[s1]def[s2][s3]ghi";
    var r = new Regex(@"[^\[]+|\[[^\]]+\]");
    var ms = r.Matches(x);
    // do stuff with the MatchCollection `ms`.