2015-10-15 2 views
0

У меня есть список описаний, и я хочу, чтобы извлечь информацию блока, используя регулярное выражениеИспользование регулярных выражений для извлечения номера устройства

Я наблюдал video на регулярное выражение и вот что я получил

import re 
x = ["Four 10-story towers - five 11-story residential towers around Lake Peterson - two 9-story hotel towers facing Devon Avenue & four levels of retail below the hotels", 
    "265 rental units", 
    "10 stories and contain 200 apartments", 
    "801 residential properties that include row homes, town homes, condos, single-family housing, apartments, and senior rental units", 
    "4-unit townhouse building (6,528 square feet of living space & 2,755 square feet of unheated garage)"] 
unit=[] 
for item in x: 
    extract = re.findall('[0-9]+.unit',item) 
    unit.append(extract) 
print unit 

это работает с концами строк в блоке, но я также заканчиваю строки 'rental unit','apartment','bed' и другими, как в этом примере. Я мог бы сделать это с несколькими регулярными выражениями, но есть ли способ сделать это в пределах одного регулярного выражения?

Спасибо!

+4

Использовать группу: '(?: Rent unit | apartment | bed)' вместо фиксированного слова –

+0

Спасибо! Я не знал об этом. Опять же, спасибо! – qshngv

+1

Если вы не знаете список единиц, вы не можете использовать только регулярное выражение. Скажем, вы можете использовать 'r '\ d + (?: \. \ D +)? [\ S -] \ w +', но он просто захватит '801 жилых', а не' 801 жилых объектов'. Regex не такой умный. –

ответ

0

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

compiled_re = re.compile(ur"(\d*)-unit|(\d*)\srental unit|(\d*)\sbed|(\d*)\sappartment") 
unit = [] 
for item in x: 
    extract = re.findall(compiled_re, item) 
    unit.append(extract) 

Вы бы расширить шаблон регулярного выражения с новым «|» за которым следует шаблон поиска для каждого возможного типа ссылки на номера единиц. К сожалению, если в записях очень низкая согласованность, этот подход станет в основном непригодным для использования.

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

Смежные вопросы