【问题标题】:Split string into list of words and separators将字符串拆分为单词列表和分隔符
【发布时间】:2019-08-25 17:11:25
【问题描述】:

给定这个字符串:

one#two*three#four#five*

提取对列表的快速解决方案是什么? 每对都包含带有分隔符的单词,如下所示:

[
    ['one', '#'],
    ['two', '*'],
    ['three', '#'],
    ['four', '#'],
    ['five', '*']
]

特别是在我的情况下,我想同时使用 空格换行 字符作为分隔符。

【问题讨论】:

    标签: dart


    【解决方案1】:

    你需要一个正则表达式:

    (\w+)([#|*])
    

    在此处查看示例 Dart 代码,这应该可以帮助您:https://dartpad.dartlang.org/ae3897b2221a94b5a4c9e6929bebcfce

    【讨论】:

      【解决方案2】:

      全面披露:dart 对我来说是一种相对较新的语言。

      也就是说,正则表达式可能是您最好的选择。假设您只使用小写 a-z 字母后跟单个字符,这应该可以解决问题。

        RegExp r = RegExp("([a-z]+)(.)");
        var matches = r.allMatches("one#two*three#four#five*");
        List<dynamic> l = [];
        matches.toList().asMap().forEach((i, m) => l.add([m.group(1), m.group(2)]));
        print(l);
      

      【讨论】:

        【解决方案3】:

        根据其他回复,这是我将 空格换行 作为分隔符的解决方案:

        void main() {
          RegExp r = RegExp(r"(\S+)([\s]+|$)");
          var text = 'one two three \n\n four ';
          var matches = r.allMatches(text);
          List<dynamic> l = [];
          matches.toList().asMap().forEach((i, m) => l.add([m.group(1), m.group(2)]));
          print(l);
        }
        

        输出

        [[一,],[二,],[三,

        ], [四, ]]

        解释:https://regex101.com/r/cRpMVq/2

        【讨论】:

          猜你喜欢
          • 2014-11-28
          • 1970-01-01
          • 2011-11-29
          • 2011-09-11
          • 1970-01-01
          • 2011-11-03
          • 2023-01-22
          • 2011-06-12
          • 2018-03-13
          相关资源
          最近更新 更多