【问题标题】:dart regex remove space phone飞镖正则表达式删除空间电话
【发布时间】:2018-06-10 11:50:44
【问题描述】:

我尝试了所有这些正则表达式解决方案,但不匹配 REGEX Remove Space

我使用飞镖和颤振,我试图只捕获这种类型的字符串的数字:

案例一

     aaaaaaaaa 06 12 34 56 78  aaaaaa 

案例2

    aaaaaaaa 0612345678 aaaaaa 

案例3

   aaaaaa +336 12 34 56 78 aaaaa

我搜索只有 0612345678 没有空格也没有 +33。在 +33 的情况下只有 10 位我需要将 +33 替换为 0

目前我有这个代码 \D*(\d+)\D*?谁带着案子跑2

【问题讨论】:

  • 为什么选择尝试\D*(\d+)\D*??它不匹配以空格分隔的数字。模式的规则是什么?字符串中的第一个数字/空格块?
  • sorry (\d+) 目前就足够了,它与 aaaaaaaa 0612345678 aaaaaaa 结果是 0612345678 匹配。但是如果数字之间有空格,例如 06 12 34 56 78,则此代码无效

标签: regex dart flutter


【解决方案1】:

您可以匹配并捕获可选的+33,然后是一个数字,后跟空格或数字,然后检查第 1 组是否匹配,然后相应地构建结果。

这是一个示例解决方案(已测试):

var strs = ['aaaaaaaaa 06 12 34 56 78  aaaaaa', 'aaaaaaaa 0612345678 aaaaaa', 'aaaaaa +336 12 34 56 78 aaaaa', 'more +33 6 12 34 56 78'];
  for (int i = 0; i < strs.length; i++) {
    var rx = new RegExp(r"(?:^|\D)(\+33)?\s*(\d[\d ]*)(?!\d)");
    var match = rx.firstMatch(strs[i]);
    var result = "";
    if (match != null) {
      if (match.group(1) != null) {
        result = "0" + match.group(2).replaceAll(" ", "");
      } else {
        result = match.group(2).replaceAll(" ", "");
      }
      print(result);
  }
}

在输出中返回 3 个 0612345678 字符串。

模式是

(?:^|\D)(\+33)?\s*(\d[\d ]*)(?!\d)

its demo here

  • (?:^|\D) - 字符串或除数字以外的任何字符的开头
  • (\+33)? - 捕获 +33 1 或 0 次的组 1
  • \s* - 任何 0+ 个空格
  • (\d[\d ]*) - 第 2 组:数字后跟空格或/和数字
  • (?!\d) - 不允许紧靠右边的数字。

使用match.group(2).replaceAll(" ", "") 从第 2 组中删除空格,因为在一次匹配操作中无法匹配不连续的字符串。

【讨论】:

  • 对不起,我有其他情况...... +33 6 12 34 56 78 它返回 33612345678
  • 可以使用 (r"(?:^|\D)(\+33)?\s?(\d[\d ]*)(?!\d)")跨度>
  • @QuentinGuichot 对,你也可以使用\s* 匹配0 个或多个空格,而不是\s? 匹配1 个或0 个空格。我也更新了答案以考虑这种情况。
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 2018-12-01
  • 2022-11-14
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
相关资源
最近更新 更多