Негативный взгляд на дефис - PullRequest
0 голосов
/ 07 мая 2018

У меня есть следующая строка "Orig. 750-52.00 и orig. 3.99", и я хочу извлечь orig. 3.99 из этой строки.
Я пытаюсь сделать это, используя следующий код

s = "Orig. 750-52.00 and orig. 3.99"
orig = re.compile(r"(orig.\s?[\d|\.]+)(?!-)", re.IGNORECASE)
if orig.search(s):
    print "Yes:", orig.search(s).groups()

Вывод: Да: («Ориг. 75»,)

1 Ответ

0 голосов
/ 07 мая 2018

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

orig\.\s*\d[\d.]*(?!-|\.?\d)

См. Демоверсию regex .

Детали

  • orig\. - подстрока orig. (обратите внимание, что точка должна быть экранирована, чтобы соответствовать буквальной точке)
  • \s* - 0+ пробельных символов
  • \d[\d.]* - цифра, за которой следуют 0+ цифр или . символы
  • (?!-|\.?\d) - отрицательный прогноз, который не соответствует совпадению, если есть дефис или необязательный ., сопровождаемый цифрой сразу справа от текущего местоположения.

См. Демоверсию Python :

import re
s = "Orig. 750-52.00 and orig. 3.99"
orig = re.compile(r"orig\.\s*\d[\d.]*(?!-|\.?\d)", re.IGNORECASE)
m = orig.search(s)
if m:
    print("Yes: {}".format(m.group()))
# => Yes: orig. 3.99

Также обратите внимание, что нет необходимости повторять операцию поиска orig.search(s), вы можете присвоить результат поиска регулярного выражения переменной (см. m), а затем, после проверки, не является ли объект данных соответствия None, получить доступ ко всему матчу через m.group().

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