首页 > 解决方案 > RE.将一个单元格中的任意两个值与另一个单元格匹配

问题描述

我目前正在尝试匹配两个不同电子表格中的两个单元格,到目前为止我可以做到,但现在我遇到一个问题,即一个单元格中有多个值,我想将单元格中的两个出现与一个单元格匹配有大量的信息。

例如:

(标题)- 数据 A 单元格:汽车型号变化 90-92

(年)- 数据 B 单元格:1990|1991|1992|1993|1994|1995|1996|1997|1998|1999

import re

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

但我想尝试匹配标题中数据 B 的任意两个值,但不确定解决问题的最佳方法。

标签: pythonregexpython-3.xre

解决方案


您可以动态构建您的模式,例如

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

请参阅正则表达式演示,仅当它在字符串中找到两次出现的两位数年份时才会匹配。图案细节:

  • (?s)-re.Sre.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作为一个整体

查看完整的 Python 演示

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

推荐阅读