c# - 正则表达式拆分字符串但保留分隔符

标签 c# regex split

我想做一个 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"

分隔符消失了(考虑到我的正则表达式,这是有道理的)。有没有一种方法可以编写正则表达式以保留分隔符本身?

最佳答案

使用零长度机械环视;你想 split

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

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

作为 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]"

关于c# - 正则表达式拆分字符串但保留分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2910536/

相关文章:

Javascript/jQuery 正则表达式代码问题

java - 验证 LaTeX 文件,java

c# - 按长度拆分字符串

python - 按短数字拆分列表

c# - POST json 字典

c# - 将泛型类型参数限制为 System.Enum

c# - 在没有适当的 REST-Api 的情况下测试 RestSharp 的反序列化

java - 正则表达式,获取#后面的单词,以及#后面的单词,如果单词是 'the'

c# - LINQ To SQL 线程安全

regex - 如何从 Typescript 中的正则表达式 exec 匹配访问组?