dart regex移除太空电话
我尝试了所有的正则表达式解决方案,但没有找到匹配的 我使用dart和Flatter,并尝试捕捉这种类型字符串的唯一数字: 案例1dart 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+
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)?
1次或0次的组1+33
-任何0+空格\s*
-第2组:后跟空格或/和数字的数字(\d[\d]*)
-不允许紧靠右边的数字(?!\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)