代码之家  ›  专栏  ›  技术社区  ›  L. Guthardt

C#Regex split(),不删除拆分条件字符

  •  1
  • L. Guthardt  · 技术社区  · 8 年前

    我正在拆分一个 string Split() 方法

    var splitRegex = new Regex(@"[\s|{]");
    
    string input = "/Tests/ShowMessage { 'Text': 'foo' }";
    
    //second version of the input: 
    //string input = "/Tests/ShowMessage{ 'Text': 'foo' }";
    
    string[] splittedText = splitRegex.Split(input, 2);
    

    这个 一串 只是输入的样本模式。有两种不同的结构 input ,一次在 { 或者没有空间。我想分开 输入 { 括号以获得以下结果:

    • /测试/显示消息
    • {“Text”:“foo}

    如果有一个空格,字符串在那里被拆分(空格被删除),我得到了我想要的结果。但是如果没有空格,我就在 { ,所以 { 被移除,但我不想要。我如何使用 Regex.Split() 不删除拆分条件字符?

    4 回复  |  直到 8 年前
        1
  •  5
  •   user9229688 user9229688    8 年前

    方括号创建了一个字符集,因此您希望它与这些内部字符中的一个完全匹配。为了满足你的欲望,从移除它们开始。

    所以要匹配它 随机计数 必须添加的空白数 * ,结果是这个 \s* .

    • \s 是空白
    • * 表示零或更多

    如果不删除拆分条件字符,可以使用前瞻断言 (?=...) .

    • (?=...) (?!...) 是一个前瞻性断言

    合并的 Regex 看起来像这样: \s*(?={)

    This 是一个非常好和详细的文件,所有不同的 零件,你可以看看。此外,您可以测试您的 正则表达式 轻松且免费 here .

        2
  •  0
  •   juharr    8 年前

    为了在比赛中不包括花括号,你可以把它放在展望中

    \s*(?={)
    

    这将匹配任意数量的空格,直到打开花括号之前的位置。

        3
  •  0
  •   Caius Jard    8 年前

    您可以使用常规字符串拆分,在“{”上,并修剪空格:

    var bits = "/Tests/ShowMessage { 'Text': 'foo' }".Split("{", StringSplitOptions.RemoveEmptyEntries);
    bits[0] = bits[0].TrimEnd();
    bits[1] = "{" + bits[1];
    

    如果要使用正则表达式路由,如果稍微更改正则表达式,可以添加{back:

    var splitRegex = new Regex(@"\s*{");
    
    string input = "/Tests/ShowMessage { 'Text': 'foo' }";
    
    //second version of the input: 
    //string input = "/Tests/ShowMessage{ 'Text': 'foo' }";
    
    string[] splittedText = splitRegex.Split(input, 2);
    splittedText[1] = "{" + splittedText[1];
    

    它意味着“在出现(零个或多个空格后跟{)时分割”-因此分割操作会核化你的空格(你想要的)和{(你不想要的),但你可以确定地将{放回,这意味着你得到了你想要的

        4
  •  0
  •   Pit    4 年前
    var splitedList = srt.Text.Replace(".", ".#").Replace("?", "?#").Replace("!", "!#").Split(new[] { "#"}, StringSplitOptions.RemoveEmptyEntries).ToList();
    

    通过-> “你好,我是戴夫!”

    结果(拆分条件字符存在)

    1. “你好。”
    2. “我是戴夫!”