Вы можете использовать
re.sub(r"\b(AVENUE\s+[A-Z]).*", r"\1", text, flags=re.I)
См. Демо regex и демо Python :
import re
strs = ['9201 AVENUE B - GROUND FL REAR', '56-58 AVENUE B STORE #2', '9201 AVENUE B - GROUND FL REAR', '1315 AVENUE C', '431 WEST AVENUE D BASEMENT UNIT', '12334 Avenue Z Store ']
for s in strs:
print(re.sub(r"\b(AVENUE\s+[A-Z]).*", r"\1", s, flags=re.I))
# => [9201 AVENUE B, 56-58 AVENUE B, 9201 AVENUE B, 1315 AVENUE C, 431 WEST AVENUE D, 12334 Avenue Z]
Шаблон соответствует :
\b
- граница слова (AVENUE\s+[A-Z])
- Группа 1 (значение указывается с помощью заполнителя \1
из шаблона замены): AVENUE
- буквенная строка \s+
- 1+ пробелы [A-Z]
- буква ASCII
.*
- любые 0+ символов, кроме символов разрыва строки, как можно больше.
ПРИМЕЧАНИЕ : флаг re.I
сделает регистр [A-Z]
нечувствительным к регистру. Чтобы избежать этого, используйте re.sub(r"\b((?i:AVENUE)\s+[A-Z]).*", r"\1", s)
, см. this Python demo .