【问题标题】:Dart: Use regexp to remove whitespaces from stringDart:使用正则表达式从字符串中删除空格
【发布时间】:2017-08-24 15:48:04
【问题描述】:

我正在尝试使用 Dart 和 Regexp 从字符串中删除所有空格。给定以下字符串:“test test1 test2”我想得到:“testtest1test2”。我已经阅读了一些 javascript 中的示例,但它们似乎不适用于 Dart。这些是迄今为止的一些尝试:

print("test test1 test2".replaceAll(new RegExp(r"/^\s+|\s+$|\s+(?=\s)/g"), ""));
print("test test1 test2".replaceAll(new RegExp(r"/\s+\b|\b\s/ig"), ""));

这是基于:Regex to remove whitespaces

有人可以告诉我哪里出了问题。

【问题讨论】:

  • 我认为如果您只是想删除所有空格,它应该是: print("test test1 test2".replaceAll(new RegExp(r"\s+"), ""));

标签: regex dart whitespace


【解决方案1】:

我认为这涵盖了更多的基础: textWithWhitespace.replaceAll(new RegExp(r"\s+\b|\b\s|\s|\b"), "")

当前接受的答案对我不起作用。在全是空格的情况下,我的空格没有被删除

String whitespace = "    ";
print(whitespace.replaceAll(new RegExp(r"\s\b|\b\s"), "").length);
//length is 4 here

【讨论】:

    【解决方案2】:

    我无法相信简单地从字符串中删除空格会如此复杂。所以我想出了这个解决方案,我比玩正则表达式更喜欢它:

    myString.split(" ").join("");
    

    【讨论】:

      【解决方案3】:
      print("test test1 test2".replaceAll(new RegExp(r"\s+\b|\b\s"), ""));
      

      (没有/ig)为我工作。 这种方式在 Dart 中不支持这些选项。

      • /g 相当于replaceAll 中的All
      • /i 等价于 new RegExp(r"...", caseSensitive: false)

      【讨论】:

      • 谢谢 - 这解释了我做错了什么!我看到这仅适用于单个空间间隙 - 你知道我应该添加什么以使其适用于不同长度的空间间隙吗?例如"测试 test1 test2"
      • 我假设在您的问题下方发布的狙击手应该做您想做的事情。
      • @GünterZöchbauer 检查这个.. 这不行 这不行.. 试试这个String name = '4 ever 1 k g @@ @'; print(name.replaceAll(new RegExp(r"\s+\b|\b\s"), ""));
      【解决方案4】:

      即使不使用 RegExp 也能正常工作:

      myString.replaceAll(" ", "");
      

      【讨论】:

        【解决方案5】:
        str.replaceAll(new RegExp("[ \n\t\r\f]"), '');
        

        这将删除与空格、制表符、回车符、换行符或换页符匹配的所有空格 (\t \r \n \f),如此处所示https://www.regular-expressions.info/shorthand.html#:~:text=%5Cs%5Cd%20matches%20a%20whitespace,latter%20matches%201%20(one)

        String s1 = " have Yourself \n \t A M e r\r \r \f r   y  Little Christma s    ";
        print(s1.replaceAll(new RegExp("[ \n\t\r\f]"), '')); 
        //haveYourselfAMerryLittleChristmas
        

        第二个例子演示了一个全为空格的字符串在应用 replaceAll 后长度为零。

        String whiteSpacesOnly = "   \t \n \r \f";
        print(whiteSpacesOnly.replaceAll(new RegExp("[ \n\t\r\f]"), '').length); 
        //0
        

        【讨论】:

          【解决方案6】:

          whitespace.replaceAll(new RegExp(r"\ "), ""); 这对我来说没问题。

          【讨论】:

            【解决方案7】:

            这不是问题的确切答案。然而,这是我今天早些时候偶然发现这个问题时需要的答案。

            以下代码将带有随机空格(甚至多个空格)的String 转换为每个单词之间只有单个 空格的String(它也删除了外部的空格)。

            例如,当您的用户为您的应用程序选择一个用户名并决定做一个傻瓜并输入" Mr Bob Felix Johnson " 而不是"Mr Bob Felix Johnson" 时,这可能会很好。

            void main() {
              // INPUT NAME WITH UNWANTED SPACES
              String text = '  Mr  Bob Felix    Johnson     ';
              // INPUT NAME WITH UNWANTED SPACES
              final pattern = RegExp('\\s+');
              text = text.replaceAll(pattern, ' ');
              if (text[0] == ' ') {
                text = text.substring(1, text.length);
              }
              if (text[text.length - 1] == ' ') {
                text = text.substring(0, text.length - 1);
              }
              // NAME WITH REMOVED SPACES
              print(text); // THIS PRINTS "Mr Bob Felix Johnson"
              // NAME WITH REMOVED SPACES
            }
            

            【讨论】:

              【解决方案8】:

              这里除了 Matthew Trent 的解决方案https://stackoverflow.com/a/67396167/12411655

              不是这个

              if (text[0] == ' ') {
                  text = text.substring(1, text.length);
                }
                if (text[text.length - 1] == ' ') {
                  text = text.substring(0, text.length - 1);
                }
              

              你可以像这样使用 trim() 方法

              text.trim().replaceAll(RegExp('\\s+'), ' ');
              

              【讨论】:

                【解决方案9】:

                mysecond = myString.trim() 对我有用 :)

                【讨论】:

                • 这只会删除前后空格。字符串中间没有任何东西
                猜你喜欢
                • 2018-11-20
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-05-23
                • 1970-01-01
                • 1970-01-01
                • 2021-01-17
                • 2014-06-20
                相关资源
                最近更新 更多