簡體   English   中英

正則表達式拆分字符串但保留分隔符

[英]Regex split string but keep separators

我想在一些分隔符上做一個Regex.Split ,但我想保留分隔符。 舉一個我正在嘗試的例子:

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

我提出的正則表達式是new Regex("\\\\[|\\\\]|\\\\]\\\\[")的正則new Regex("\\\\[|\\\\]|\\\\]\\\\[") 但是,這給了我以下內容:

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

分隔符已經消失(考慮到我的正則表達式,這是有意義的)。 有沒有辦法編寫正則表達式,以便保留分隔符本身?

使用零長度加工外觀; 你想分開

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

也就是說,我們聲明匹配文字[在前面,或者我們斷言文字的匹配]后面的任何地方。

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

您可以使用.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`.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM