dart regex移除太空电话

dart regex移除太空电话,regex,dart,flutter,Regex,Dart,Flutter,我尝试了所有的正则表达式解决方案,但没有找到匹配的 我使用dart和Flatter,并尝试捕捉这种类型字符串的唯一数字: 案例1 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+

我尝试了所有的正则表达式解决方案,但没有找到匹配的

我使用dart和Flatter,并尝试捕捉这种类型字符串的唯一数字:

案例1

     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一起运行的用户可以匹配并捕获可选的
+33
,然后是后跟空格或数字的数字,然后检查组1是否匹配,然后相应地生成结果

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

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

由于无法在一次匹配操作中匹配不连续的字符串,因此将使用
匹配从组2中删除空格。组(2).replaceAll(“,”)

为什么选择尝试
\D*(\D+)\D*?
?它与用空格分隔的数字不匹配。模式的规则是什么?字符串?sorry(\d+)中的第一个数字/空格块当前已足够,它与AAAAA 0612345678 AAAAA匹配结果为0612345678。但是,如果06 12 34 56 78之类的数字之间有空格,则此代码无效。对不起,我有另一个案例。。。使用+33 6 12 34 56 78返回33612345678它可以使用(r)(?:^\D)(\+33)?\s(\D[\D]*)(?!\D)”)@QuentinGuichot对,您也可以使用
\s*
匹配0个或更多的空格,而不是匹配1个或0个空格的
\s?
。我也更新了答案来解释这个场景。
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);
  }
}
(?:^|\D)(\+33)?\s*(\d[\d ]*)(?!\d)