Удалите форматирование из номера телефона в США и его добавочного номера - PullRequest
2 голосов
/ 09 июля 2020

Привет, мне нужна помощь, чтобы получить номер телефона и его расширение с помощью replace или regex

<b>phone</b>
(123) 455-6789 --> 1234556789
(123) 577-2145 ext81245 --> 1235772145

<b>extension</b>
(123) 455-6789 --> 
(123) 577-2145 ext81245 --> 81245
"(123) 455-6789" -replace "[()\s\s-]+|Ext\S+", "" "(123) 455-6789 Ext 2445" -replace "[()\s\s-]+|Ext\S+", ""

Это решает номер телефона, но не расширение.

Ответы [ 4 ]

3 голосов
/ 09 июля 2020

Вы можете попробовать:

^\((\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 раз.
    • ) - Закрытие незахваченной группы.
    • ? - Представляет отправляет квантификатор, делая всю невыявленную группу необязательной.

Pictorial Representation

You can find the sample demo of the above regex in здесь.

Команды 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

Пример результата: Результат

1 голос
/ 09 июля 2020

После замены всех символов вы можете разделить результат, чтобы получить два числа

Применяется к вашему примеру

@(
'(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   
0 голосов
/ 09 июля 2020

В качестве альтернативы вы можете использовать две функции замены в одном go. Скажем, ваши исходные данные находятся в File1.txt и вы хотите вывести на File2.txt, тогда вы можете использовать:

enter image description here

$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'

введите описание изображения здесь

0 голосов
/ 09 июля 2020

Попробуйте этот паттерн. Он будет соответствовать телефонным номерам с и без скобок, пробелов и дефисов.

((?:\(?)(\d{3})(?:\)?\s?)(\d{3})(?:-?)(\d{4}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...