Python регулярное выражение для размера сайта недвижимости - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь извлечь размер сайта из списка свойств. В настоящее время считается, что regex - лучший способ сделать это.

Описание свойства находится в форме:

  1. «бла-бла-бла 0,5 акра бла-бла-бла»
  2. «бла-бла-бла треть акра бла-бла-бла»
  3. «бла-бла-бла 3 акра бла-бла-бла»
  4. «бла-бла-бла 1 акр бла-бла-бла»

То, что мне нужно, - это шаблон regex , который может соответствовать двум groups. Размер сайта в приведенных выше примерах 0,5, третий, 1, 3 и размер metric, в приведенных выше примерах "acre".

В настоящее время ive получил выражение регулярного выражения:

    (^\d*[.,]?\d*) of an (acre)

, что правильно соответствует «0,5 акра», но не соответствует «бла-бла-бла 0,5 акра-бла-бла-бла». Я предполагаю, что мне не хватает чего-то в regex, которое игнорирует предыдущие и конечные слова?

Любая помощь будет очень признательна. Спасибо!

Ответы [ 4 ]

1 голос
/ 03 августа 2020

Итак, в основном у вас есть число или строка (например, third), за которыми следует слово «акр / с» или «акр».

Если это так, то регулярное выражение использовать будет что-то вроде:

regex ([0-9\.]+|\w+) (?:of an )?acres?

Вот демонстрация: https://rubular.com/r/zhr6kyT3UNnZsQ

1 голос
/ 03 августа 2020

Кажется, это работает для всех ваших примеров:

  1. Захватывает цифры или третьи, четвертые и т.д. .
  2. После этого должно быть количество акров / сек.
(\d+.?\d*|third|fourth|half)(?: of an)? acres?
0 голосов
/ 03 августа 2020

Вы должны попробовать

([\w\.]+) (?:(?:acres?)|(?:of an acre))

Ознакомьтесь с демонстрацией

Объяснение

  • ([\w\.]+) - Захватывает дроби и символы слов
  • - Захватывает пространство, да
  • (?:(?:acres?)|(?:of an acre)) - Захватывает
    • акр или акр
    • акр
0 голосов
/ 03 августа 2020

Возможно, вам понадобится что-то более надежное, например следующее:

(?:[\d./]+|third|quarter|half|one|two|three|four|five|ten|twenty)[\s-](?:\w+[\s-]){0,5}acres?

См. Демо для различных типов совпадений, которые он захватывает в дополнение к тому, с чего вы начали. Часть (?:\w+[\s-]){0,5} соответствует до 5 слов между числом и «акром».

Как сказал @Tom Karzes в комментариях, обязательно используйте re.search. И для этого типа ситуаций вы также должны использовать флаг re.IGNORECASE .

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