RE.Match любых двух значений в ячейке с другой ячейкой - PullRequest
1 голос
/ 15 апреля 2020

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

Например:

(название) - Данные A Ячейка: Изменение модели автомобиля 90-92

(год) - Ячейка B данных : 1990 | 1991 | 1992 | 1993 | 1994 | 1995 | 1996 | 1997 | 1998 | 1999

import re

if re.match(year, title):
   print("Success")

Но я хочу попробовать сопоставить любые два значения данных B в названии, но не уверен, что это лучший способ подойти к проблеме.

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете построить свой шаблон динамически, как

p = "|".join([x[2:] for x in year.split("|")])
rx = re.compile(rf'(?s)\b(?:{p})\b.*?\b(?:{p})\b')

См. демонстрационное выражение регулярного выражения , оно будет соответствовать только тогда, когда будет найдено два вхождения с двумя ди git годами в строка. Детали шаблона:

  • (?s) - re.S или re.DOTALL флаг встроенного модификатора, который позволяет . сопоставлять символы разрыва строки
  • \b(?:90|91|92|93|94|95|96|97|98|99)\b - 90, 91 .. 99 как целое слово
  • .*? - любые 0+ символов, как можно меньше
  • \b(?:90|91|92|93|94|95|96|97|98|99)\b - 90, 91 .. 99 как целое слово

См. full Python demo :

import re
titles = [r'Car Model Variation 90-92',r'Car Model Variation 90']
year = r'1990|1991|1992|1993|1994|1995|1996|1997|1998|1999'
p = "|".join([x[2:] for x in year.split("|")])
rx = re.compile(rf'(?s)\b(?:{p})\b.*?\b(?:{p})\b')

for title in titles:
  print ( f"'{title}' =>", bool(rx.search(title)) )

Вывод:

'Car Model Variation 90-92' => True
'Car Model Variation 90' => False
...