我们需要使用C#中的Regex.Replace()从电话号码中删除字符.允许的字符是+(仅第一个字符)和[0-9].应该过滤任何其他内容.
替换所有非数字的工作正常,但我们怎么能只允许+作为第一个char?
我们的正则表达式:
[^+0-9]+
Run Code Online (Sandbox Code Playgroud)
在这个数字:+41 456-7891+23它会删除空格和连字符,但不会删除+前面的23.
知道如何解决这个问题吗?
使用以下正则表达式,然后用\1或替换匹配的字符$1.
^(\+)|\D
Run Code Online (Sandbox Code Playgroud)
要么
^(\+)|[^\d\n]
Run Code Online (Sandbox Code Playgroud)
并且m在使用上述正则表达式时不要忘记添加多行修饰符.
使用Javascript:
> '+41 456-7891+23'.replace(/^(\+)|\D/g, "$1")
'+41456789123'
Run Code Online (Sandbox Code Playgroud)
PHP:
$str = '+41 456-7891+23';
echo preg_replace('~^(\+)|\D~', '\1', $str);
Run Code Online (Sandbox Code Playgroud)
R:
> gsub("^(\\+)|\\D", "\\1", '+41 456-7891+23')
[1] "+41456789123"
Run Code Online (Sandbox Code Playgroud)
C#
string result = Regex.Replace('+41 456-7891+23', @"^(\+)|\D", "$1");
Run Code Online (Sandbox Code Playgroud)
Java的
System.out.println("+41 456-7891+23".replaceAll("^(\\+)|\\D", "$1"));
Run Code Online (Sandbox Code Playgroud)
基本的sed
$ echo '+41 456-7891+23' | sed 's/^\(+\)\|[^0-9]/\1/g'
+41456789123
Run Code Online (Sandbox Code Playgroud)
Gnu sed
$ echo '+41 456-7891+23' | sed -r 's/^(\+)|[^0-9]/\1/g'
+41456789123
Run Code Online (Sandbox Code Playgroud)
红宝石:
> '+41 456-7891+23'.gsub(/^(\+)|\D/m, '\1')
=> "+41456789123"
Run Code Online (Sandbox Code Playgroud)
蟒蛇
>>> re.sub(r'(?<=^\+).*|^[^+].*', lambda m: re.sub(r'\D', '', m.group()), '+41 456-7891+23')
'+41456789123'
>>> regex.sub(r'^(\+)|[^\n\d]', r'\1', '+41 456-7891+23')
'+41456789123'
Run Code Online (Sandbox Code Playgroud)
Perl的
$ echo '+41 456-7891+23' | perl -pe 's/^(\+)|[^\d\n]/\1/g'
+41456789123
$ echo '+41 456-7891+23' | perl -pe 's/^\+(*SKIP)(*F)|[^\d\n]/\1/g'
+41456789123
Run Code Online (Sandbox Code Playgroud)