Regex for python: как извлечь строку между словами? - PullRequest
0 голосов
/ 12 июля 2020

Предположим, у меня есть предложение:

Meet me at 201 South First St. at noon

И я хочу получить такой адрес:

South First

Каким будет подходящее выражение Regex для этого? В настоящее время у меня есть это, но оно не работает:

 x = re.search(r"\d+\s?=([A-Z][a-z]*)\s(Rd.|Dr.|Ave.|St.)",searchstring)

Где строка поиска - это предложение. Адресу всегда предшествует 1 или более цифр, за которыми следует пробел, за которым следует либо Rd. Dr. Ave. или St. Адрес также всегда начинается с заглавной буквы.

Ответы [ 3 ]

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

Первая группа, часть, где вы пытаетесь сопоставить адрес, - [A-Z][a-z]*, это означает одну заглавную букву, за которой следуют любые строчные буквы. Скорее всего, вам нужна любая прописная или строчная буква или пробел: [A-Za-z ]*. Также обратите внимание, что точки во второй группе означают любой символ, а не буквальный ., поэтому вам нужно избегать его. Решение будет выглядеть так:

>>> re.search(r'\d+\s?([A-Za-z ]*)\s+(Rd|Dr|Ave|St)\.', 'Meet me at 201 South First St. at noon')[1]
'South First'

Или просто используйте ., чтобы принять что угодно.

>>> re.search(r'\d+\s?(.*?)\s+(Rd|Dr|Ave|St)\.', 'Meet me at 201 South First St. at noon')[1]
'South First'
1 голос
/ 12 июля 2020

Вы можете использовать

\d+\s*([A-Z].*?)\s+(?:Rd|Dr|Ave|St)\.

См. демонстрацию регулярных выражений .

Подробности

  • \d+ - одна или несколько цифр
  • \s* - 0 или более пробелов
  • ([A-Z].*?) - группа захвата # 1: заглавная буква ASCII, а затем любые 0 или более символов, кроме разрыва строки как можно меньше символов
  • \s+ - 1+ пробелов
  • (?:Rd|Dr|Ave|St) - Rd, Dr, Ave или St
  • \. - точка

См. Python демо :

m = re.search(r'\d+\s*([A-Z].*?)\s+(?:Rd|Dr|Ave|St)\.', text)
if m:
    print(m.group(1)) 

Вывод: South First.

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

Вот как:

import re
s = 'Meet me at 201 South First St. at noon'
print(re.findall('(?<=\d )[A-Z].*(?= d.|Dr.|Ave.|St.)', s)[0])

Вывод:

'South First'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...