【问题标题】:Remove formatting from US phone number and their extension number从美国电话号码及其分机号码中删除格式
【发布时间】:2020-10-29 14:38:21
【问题描述】:

您需要帮助使用替换或正则表达式获取电话号码和扩展名

电话 (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+", ""

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

【问题讨论】:

  • 您使用什么语言/工具?您是否尝试过自己解决这个问题?
  • 您应该在问题标题中写上“北美电话号码”。

标签: regex powershell replace


【解决方案1】:

因此,您也可以一次使用两个替换功能。假设您的原始数据位于File1.txt 并且您想输出到File2.txt,那么您可以使用:

$content = Get-Content -Path 'C:\File1.txt'
$newContent = $content -replace '[^\d\n]', '' -replace '^(.{10})(.*)', 'Phone: $1   Extention: $2'
$newContent | Set-Content -Path 'C:\File2.txt'

【讨论】:

    【解决方案2】:

    你可以试试:

    ^\((\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 次。
      • ) - 关闭未捕获组。
      • ? - 表示使整个非捕获组可选的量词。

    您可以在here.找到上述正则表达式的示例演示

    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
    

    示例结果:

    【讨论】:

      【解决方案3】:

      替换完所有字符后,可以拆分结果得到两个数字

      应用于您的示例

      @(
      '(123) 455-6789'
       , '(123) 577-2145 ext81245'
      ) | % {
          $elements = $_ -replace '[()\s\s-]+' -split 'ext' 
          [PSCustomObject]@{
              phone = $elements[0]
              extension = $elements[1]
          }
      }
      

      退货

      phone      extension
      ------     ---------
      1234556789          
      1235772145 81245   
      

      【讨论】:

        【解决方案4】:

        试试这个模式。它将匹配带有的电话号码,不带括号、空格和连字符。

        ((?:\(?)(\d{3})(?:\)?\s?)(\d{3})(?:-?)(\d{4}))
        

        【讨论】:

          猜你喜欢
          • 2010-10-14
          • 2011-05-22
          • 2011-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-22
          相关资源
          最近更新 更多