Что нового

Вытащить номера телефонов из текста

Ganz

Новичок
Сообщения
8
Репутация
0
Всем привет!
Задался я целью вытащить номера телефонов из текста. Логику работы выражения придумал - а умения его написать у меня не хватит ((

Как выражение должно работать по моему мнению:
Выражение должно находить любые 11 цифр подряд в тексте, например:

"Форум Русского сообщества 89111111111Autoit"

Регистрируем в переменную $number = 89111111111

Далее, необходимо добавить опции к регулярному выражению - это регистрировать цифры не подряд - а c допуском каких-либо других символов кроме цифр.

Например - если мы делаем поправку - что допускается иметь между цифрами знак "-" то регулярное выражение начинает рассматривать 11 цифр подряд между которыми может быть знак "-" (единожды)

"Форум Русского сообщества -8-91-111-11111Au-toit"

Регистрируем в переменную $number = 89111111111

"Форум Русского сообщества 8-91-111----11111Au-toit" - НЕ ПОДХОДИТ!!!


Далее, нужно модифицировать нашу опцию! Допускается не просто знак "-" а набор знаков "-() " (тире, скобки и пробел)

"Форум Русского сообщества -8-(91-1)11-11 1(11Au-toit"

Регистрируем в переменную $number = 89111111111

"Форум Русского сообщества 8-91-111-(-)--11 1(((11Au-toit" - НЕ ПОДХОДИТ!!!



Мне кажется что для профи прописать такой регуляр не сложно... я лично не сделаю((((
 

xXx

╚{■_■}╗
Меценат
Сообщения
248
Репутация
95
А как же знак "+"? Все ли номера на "8" начинаются?
А лучше приложите пример входных данных.
 
Автор
G

Ganz

Новичок
Сообщения
8
Репутация
0
А как же знак "+"? Все ли номера на "8" начинаются?
А лучше приложите пример входных данных.
Здравствуйте.
Почти все номера в таком виде:

ZhbD3wfwM03Mwef5wTI6zOA==8 (34341) 6-12-32<ZhbDwfw5M0a6sfOA==8 (41) 2-22-32<Zh6iuDkljik7asfOA==wqww4qe5rdrtO<
Zhb3asfsfD0zND5ewfewM4TIzOA==8 (4822) 32-57-16<Zh34bDsafTIzOA==8 (43) 6-32-32<ZhbD8wfsd54fs8dfewOA==wsasdew4wqewO<
Zhb6Dw5fwfMS042Mw7fOA==8 (928) 725-63-74<Zasf0MwefwT3IzOA==8 (42) 4-11-32<ZhbDwsdsfsd0a8sf8OA==bDwsas8qwr8ygtw<
Zhwfw2fM30MS042w6wfzOA==8 (812) 344-42-42<ZhbDw4fwM60sa7fOA==8 (44) 6-10-32<Ze68wrw6M0a8serA==bretgythq8w8wqewO<

может где-то может встретиться +7 может где-то без скобок...
Нужны 11 значные.
 
Последнее редактирование:

xXx

╚{■_■}╗
Меценат
Сообщения
248
Репутация
95
Почти все номера в таком виде
То есть всегда перед номером "==" и после "<"?
Код:
#include <Array.au3>

$sText = 'ZhbD3wfwM03Mwef5wTI6zOA==8 (34341) 6-12-32<ZhbDwfw5M0a6sfOA==8 (41) 2-22-32<Zh6iuDkljik7asfOA==wqww4qe5rdrtO<' & @CRLF & _
        'Zhb3asfsfD0zND5ewfewM4TIzOA==8 (4822) 32-57-16<Zh34bDsafTIzOA==8 (43) 6-32-32<ZhbD8wfsd54fs8dfewOA==wsasdew4wqewO<' & @CRLF & _
        'Zhb6Dw5fwfMS042Mw7fOA==+7 (928) 725-63-74<Zasf0MwefwT3IzOA==8 (42) 4-11-32<ZhbDwsdsfsd0a8sf8OA==bDwsas8qwr8ygtw<' & @CRLF & _
        'Zhwfw2fM30MS042w6wfzOA==8 (812)    344-42-55<ZhbDw4fwM60sa7fOA==8 (44) 6-10-32<Ze68wrw6M0a8serA==bretgythq8w8wqewO<'

$aArray = StringRegExp(StringRegExpReplace($sText, '[\h()\-]', ''), '==(\+?\d{11})<', 3)
; $aArray = StringRegExp(StringRegExpReplace($sText, '[\h()\-+]', ''), '==(\d{11})<', 3) ; Вариант без "+"
_ArrayDisplay($aArray)
 
Последнее редактирование:
  • Like
Реакции: Norm
Автор
G

Ganz

Новичок
Сообщения
8
Репутация
0
То есть всегда перед номером "==" и после "<"?
Да.
Проблема в том что этих разделителей в тексте очень много. Номера то всегда между этими разделителями. Но между этими разделителями может быть и мусор...
 

Norm

Продвинутый
Сообщения
270
Репутация
70
Я бы так сделал
Код:
#include <StringConstants.au3>
#include <Array.au3>

Local $sString = "ZhbD3wfwM03Mwef5wTI6zOA==8 (34341) 6-12-32<ZhbDwfw5M0a6sfOA==8 (41) 2-22-32<Zh6iuDkljik7asfOA==wqww4qe5rdrtO<" & @CRLF & _
                "Zhb3asfsfD0zND5ewfewM4TIzOA==8 (4822) 32-57-16<Zh34bDsafTIzOA==8 (43) 6-32-32<ZhbD8wfsd54fs8dfewOA==wsasdew4wqewO<" & @CRLF & _
                "Zhb6Dw5fwfMS042Mw7fOA==8 (928) 725-63-74<Zasf0MwefwT3IzOA==8 (42) 4-11-32<ZhbDwsdsfsd0a8sf8OA==bDwsas8qwr8ygtw<" & @CRLF & _
                "Zhwfw2fM30MS042w6wfzOA==8 (812) 344-42-42<ZhbDw4fwM60sa7fOA==8 (44) 6-10-32<Ze68wrw6M0a8serA==bretgythq8w8wqewO<"

$sString = StringRegExpReplace($sString, "\(|\)|\h+|-", "")
Local $aArray = StringRegExp($sString, "==(\d+)<", 3)
_ArrayDisplay($aArray)
 
Автор
G

Ganz

Новичок
Сообщения
8
Репутация
0
Я бы так сделал
AutoIt код:
[URL='https://autoit-script.ru/docs/keywords/include.htm']#include[/URL] <StringConstants.au3>
[URL='https://autoit-script.ru/docs/keywords/include.htm']#include[/URL] <Array.au3>

[URL='https://autoit-script.ru/docs/keywords/dim.htm']Local[/URL] $sString = "ZhbD3wfwM03Mwef5wTI6zOA==8 (34341) 6-12-32<ZhbDwfw5M0a6sfOA==8 (41) 2-22-32<Zh6iuDkljik7asfOA==wqww4qe5rdrtO<" & [URL='https://autoit-script.ru/docs/macros.htm']@CRLF[/URL] & _
"Zhb3asfsfD0zND5ewfewM4TIzOA==8 (4822) 32-57-16<Zh34bDsafTIzOA==8 (43) 6-32-32<ZhbD8wfsd54fs8dfewOA==wsasdew4wqewO<" & [URL='https://autoit-script.ru/docs/macros.htm']@CRLF[/URL] & _
"Zhb6Dw5fwfMS042Mw7fOA==8 (928) 725-63-74<Zasf0MwefwT3IzOA==8 (42) 4-11-32<ZhbDwsdsfsd0a8sf8OA==bDwsas8qwr8ygtw<" & [URL='https://autoit-script.ru/docs/macros.htm']@CRLF[/URL] & _
"Zhwfw2fM30MS042w6wfzOA==8 (812) 344-42-42<ZhbDw4fwM60sa7fOA==8 (44) 6-10-32<Ze68wrw6M0a8serA==bretgythq8w8wqewO<"

$sString = [URL='https://autoit-script.ru/docs/functions/stringregexpreplace.htm']StringRegExpReplace[/URL]($sString, "\(|\)|\h+|-", "")
[URL='https://autoit-script.ru/docs/keywords/dim.htm']Local[/URL] $aArray = [URL='https://autoit-script.ru/docs/functions/stringregexp.htm']StringRegExp[/URL]($sString, "==(\d+)<", 3)
[URL='https://autoit-script.ru/docs/libfunctions/_arraydisplay.htm']_ArrayDisplay[/URL]($aArray)

Да. Спасибо!
Этот вариант работает. И разделители можно менять если что.

А не подскажите как сделать регулярное выражение - которое отфильтрует 11-значные номера?
 

Norm

Продвинутый
Сообщения
270
Репутация
70
А не подскажите как сделать регулярное выражение - которое отфильтрует 11-значные номера?
Код:
#include <StringConstants.au3>
#include <Array.au3>

Local $sString = "ZhbD3wfwM03Mwef5wTI6zOA==8 (34341) 6-12-32<ZhbDwfw5M0a6sfOA==8 (41) 2-22-32<Zh6iuDkljik7asfOA==wqww4qe5rdrtO<" & @CRLF & _
                "Zhb3asfsfD0zND5ewfewM4TIzOA==8 (4822) 32-57-16<Zh34bDsafTIzOA==8 (43) 6-32-32<ZhbD8wfsd54fs8dfewOA==wsasdew4wqewO<" & @CRLF & _
                "Zhb6Dw5fwfMS042Mw7fOA==8 (928) 725-63-74<Zasf0MwefwT3IzOA==8 (42) 4-11-32<ZhbDwsdsfsd0a8sf8OA==bDwsas8qwr8ygtw<" & @CRLF & _
                "Zhwfw2fM30MS042w6wfzOA==8 (812) 344-42-42<ZhbDw4fwM60sa7fOA==8 (44) 6-10-32<Ze68wrw6M0a8serA==bretgythq8w8wqewO<"

$sString = StringRegExpReplace($sString, "\(|\)|\h+|-", "")
Local $aArray = StringRegExp($sString, "==(\d{11})<", 3)
_ArrayDisplay($aArray)
 
  • Like
Реакции: Ganz
Верх