探している正規表現には、代替グループを含むオプションのグループが含まれている必要があります。
\b(yest(?:e(?:r(?:d(?:ay?)?)?)?)?|tod(?:ay?)?|tom(?:o(?:r(?:r(?:ow?)?)?)?)?)\b
デモを見る
単語全体のみを照合する必要があるため、\b単語の境界は非常に重要であることに注意してください。
正規表現の説明:
\b- 先頭の単語境界
(yest(?:e(?:r(?:d(?:ay?)?)?)?)?|tod(?:ay?)?|tom(?:o(?:r(?:r(?:o(?:w)?)?)?)?)?)- キャプチャ グループ マッチング
yest(?:e(?:r(?:d(?:ay?)?)?)?)?- yest、yeste、yester、yesterd、yesterdaまたはyesterday
tod(?:ay?)?-todまたはtodaまたはtoday
tom(?:o(?:r(?:r(?:o(?:w)?)?)?)?)?- tom、tomo、tomor、tomorr、tomorroまたはtomorrow
\b- 末尾の単語境界
Python デモを参照してください:
import re
p = re.compile(ur'\b(yest(?:e(?:r(?:d(?:ay?)?)?)?)?|tod(?:ay?)?|tom(?:o(?:r(?:r(?:ow?)?)?)?)?)\b', re.IGNORECASE)
test_str = u"yest\nyeste\nyester\nyesterd\nyesterda\nyesterday\ntod\ntoda\ntoday\ntom\ntomo\ntomor\ntomorr\ntomorro\ntomorrow\n\nyesteray\ntomorow\ntommorrow\ntody\nyesteday"
print(p.findall(test_str))
# => [u'yest', u'yeste', u'yester', u'yesterd', u'yesterda', u'yesterday', u'tod', u'toda', u'today', u'tom', u'tomo', u'tomor', u'tomorr', u'tomorro', u'tomorrow']