1

現在、2 つの異なるスプレッドシートで 2 つのセルを一致させようとしていますが、これはこれまでのところ実行できますが、1 つのセルに複数の値があるという問題があり、セル内の 2 つの出現をセルに対して一致させたいと考えています。情報が満載です。

例えば:

【商品名】 ・データAセル:車種バリエーション90~92

(年) - データ B セル: 1990|1991|1992|1993|1994|1995|1996|1997|1998|1999

import re

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

しかし、タイトルのデータ B の任意の 2 つの値を一致させたいと考えていますが、問題にアプローチする最善の方法がわかりません。

4

1 に答える 1

1

次のようにパターンを動的に構築できます

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

regex demoを参照してください。文字列内に 2 桁の年が 2 回出現した場合にのみ一致します。パターンの詳細:

  • (?s)-re.Sまたは改行文字を一致re.DOTALLさせるインライン修飾子フラグ.
  • \b(?:90|91|92|93|94|95|96|97|98|99)\b- 9091..99単語全体として
  • .*?- 任意の 0+ 文字、できるだけ少なく
  • \b(?:90|91|92|93|94|95|96|97|98|99)\b- 9091..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
于 2020-04-15T11:44:51.057 に答える