RegEx для извлечения адреса из США не работает, когда адрес разделен переводом строки - PullRequest
2 голосов
/ 19 марта 2019

У меня есть следующий RegEx для извлечения адреса США из строки.

(\d+)[ \n]+((\w+[ ,])+[\$\n, ]+){2}([a-zA-Z]){2}[$\n, ]+(\d){5}

Это не работает, если адрес имеет следующий формат.

2933 Glen Crow Court
San Jose
CA 95148

и работаетдля приведенных ниже данных.

2933 Glen Crow Court,
San Jose, CA 95148

.

2933 Glen Crow Court, San Jose, CA 95148

Любая помощь по этому вопросу будет принята с благодарностью.

Ответы [ 3 ]

3 голосов
/ 19 марта 2019

Вы можете упростить свой шаблон до чего-то подобного для сопоставления адреса, будь то в одной или нескольких строках.

\b\d+(?:\s+[\w,]+)+?\s+[a-zA-Z]{2}\s+\d{5}\b

Regex Объяснение:

  • \b\d+ - Начинается сопоставление с границей слова с одной или несколькими цифрами
  • (?:\s+[\w,]+)+? - Шаблон без группировки, который соответствует одному или нескольким пробелам, а затем тексту, содержащему один или несколько символов слова, запятую и целоеодин или несколько раз, но не жадным образом.
  • \s+[a-zA-Z]{2} - соответствует одному или нескольким пробелам, а затем двум буквенным символам, ожидающим текст, такой как CA, NY
  • \s+\d{5}\b - за которым следует один или несколько пробелов, а затем пять цифр с границей слова, чтобы избежать частичного совпадения в большом тексте

Demo

1 голос
/ 19 марта 2019

Попробуйте этот шаблон \d+\s+[\w ]+[\s,]+[\w ]+[\s,]+\w+ \d+

Объяснение:

\d+\s+ - сопоставить одну или несколько цифр, затем сопоставить одну или более пробелов

[\w ]+[\s,]+ - сопоставитьодин или несколько символов слова или пробел, затем один или несколько пробелов или запятая

\w+ \d+ - сопоставьте одно или несколько символов слова, пробел и одну или несколько цифр

Демо

1 голос
/ 19 марта 2019

Добавьте ? к проверке [ ,]:

(\d+)[ \n]+((\w+[ ,]?)+[\$\n, ]+){2}([a-zA-Z]){2}[$\n, ]+(\d){5}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...