Извлечение телефонных номеров - PullRequest
0 голосов
/ 16 марта 2020

Я хочу извлечь номера телефонов, но они соответствуют только Place C, но не соответствуют Place A и Place B. Может кто-то помочь мне с этим? Заранее спасибо!

Regex

(.+?)\s*(\d+.*Singapore\s+\d{6}\b|\d+.*S\d{6})\b(?!(\.+?)\s*)(\+65[\d ]*)

Отредактированный текст

Place A
2 Bayfront Avenue Galleria Level #B1-01 Singapore 018972 Tel: +65 6634 9969

Place B
23 Serangoon Central #B1-10 Singapore 556083 Phone: 6634 7787

Place C
1 Northpoint Drive South Wing #B1-107 Singapore 768019 6481 3433

1 Ответ

1 голос
/ 16 марта 2020

Между номером 6-ди git и номером телефона может быть метка, поэтому вам необходимо учесть это и как-то потреблять. Один из примеров для этого - позволить любому персонажу быть там, где это необязательно, это не знак +, например:

[^+]*

В контексте вашего регулярного выражения это делает:

(.+?)\s*(\d+.*Singapore\s+\d{6}\b|\d+.*S\d{6})\b(?!(\.+?)\s*)[^+]*(\+65[\d ]*)

Какой теперь соответствует во всех трех случаях.

Редактировать:

На основании обновлений я изменил регулярное выражение * соответствует всем шести случаям :

(.+?)\s*(\d+.*?Singapore\s+\d{6}\b|\d+.*?S\d{6})\b[^+0-9]*((?:\+65)?[\d ]*)
...