сопоставляя шаблон регулярного выражения с отрицательным взглядом позади - PullRequest
1 голос
/ 27 сентября 2019

Я пытаюсь написать регулярное выражение на python, которое обнаруживает шаблоны, такие как 8 куб. См и 2,8 мм, и избегает шаблонов с датой, например, 26.12.2008 г. куб. См.

, регулярное выражение, которое я пробовал для этого шаблона:. * \ d {1,} (?! /) (\ s) (cc | mm | cm)

Предполагается, что можно найти шаблоны типа 8 cc, если они не обрабатываются / /1005 *

Это регулярное выражение находит все шаблоны и не избегает даты.В чем проблема с этим регулярным выражением?

1 Ответ

1 голос
/ 27 сентября 2019

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

(?<!\d)(?<!\d/)\d+(?:\.\d+)?\s*(?:c[cm]|mm)\b

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

Подробности

  • (?<!\d)- не допускается ввод цифр сразу влево
  • (?<!\d/) - не допускается ввод цифр и / непосредственно налево
  • \d+ - 1+ цифр
  • (?:\.\d+)? - 1 или 0 вхождений . и 1+ цифр
  • \s* - 0+ пробелов
  • (?:c[cm]|mm)\b - cc, cm или mmкак целые слова.

Демо Python :

import re
rx = re.compile(r"(?<!\d)(?<!\d/)\d+(?:\.\d+)?\s*(?:c[cm]|mm)\b")
s = "I'm trying to write a regular expression in python that detects patterns like 8 cc and 2.8 mm  and avoids patterns with date like 12/26/2018 cc"
print( rx.findall(s) ) # => ['8 cc', '2.8 mm']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...