首页 > 解决方案 > 从美国电话号码及其分机号码中删除格式

问题描述

您好需要帮助获取电话号码并使用替换或正则表达式进行扩展

电话
(123) 455-6789 --> 1234556789
(123) 577-2145 转81245 --> 1235772145

扩大
(123) 455-6789 -->
(123) 577-2145 分机81245 --> 81245
"(123) 455-6789" -replace "[()\s\s-]+|Ext\S+", "" "(123) 455-6789 Ext 2445" -replace "[()\s\s-]+|Ext\S+", ""

这解决了电话号码但不解决分机。

标签: regexpowershellreplace

解决方案


你可以试试:

^\((\d{3})\)\s*(\d{3})-(\d{4})(?: ext(\d{5}))?$

上述正则表达式的解释:

  • ^, $- 分别代表行的开始和结束。

  • \((\d{3})\)- 表示与里面的数字匹配的第一个捕获组()

  • \s*- 匹配一个空白字符零次或多次。

  • (\d{3})-- 表示第二个捕获组正好捕获 3 个数字,后跟一个-.

  • (\d{4})- 表示第三个捕获组与数字完全匹配 4 次。

  • (?: ext(\d{5}))?-

    • (?:表示非捕获组
    • ext- 后跟空格和文字ext
    • (\d{5})- 正好代表数字 5 次。
    • )- 关闭非捕获组。
    • ?- 表示使整个非捕获组可选的量词。

图示

您可以在此处找到上述正则表达式的示例演示。

Powershell 命令:

PS C:\Path\To\MyDesktop> $input_path='C:\Path\To\MyDesktop\InputFile.txt'
PS C:\Path\To\MyDesktop> $output_path='C:\Path\To\MyDesktop\outFile.txt'
PS C:\Path\To\MyDesktop> $regex='^\((\d{3})\)\s*(\d{3})-(\d{4})(?: ext(\d{5}))?$'
PS C:\Path\To\MyDesktop> select-string -Path $input_path -Pattern $regex -AllMatches | % { "Phone Number: $($_.matches.groups[1])$($_.matches.groups[2])$($_.matches.groups[3])             Extension: $($_.matches.groups[4])" } > $output_path

样本结果: 结果


推荐阅读