使用正则表达式在文本中查找日期

Finding dates in text using regex

如果日期之前没有单词 Effective,我想查找文本中的所有日期。 例如,我有以下行:

FEE SCHEDULE Effective January 1, 2022 STATE OF January 7, 2022 ALASKA DISCLAIMER The January 5, 2022

我的正则表达式应该 return ['January , 2022', 'January 5, 2022']

如何在 Python 中执行此操作?

我的尝试:

>>> import re
>>> rule = '((?<!Effective\ )([A-Za-z]{3,9}\ *\d{1,2}\ *,\ *\d{4}))'
>>> text = 'FEE SCHEDULE Effective January 1, 2022 STATE OF January 7, 2022 ALASKA DISCLAIMER The January 5, 2022'
>>> re.findall(rule, text)
[('anuary 1, 2022', 'anuary 1, 2022'), ('January 7, 2022', 'January 7, 2022'), ('January 5, 2022', 'January 5, 2022')]

但是没用。

您可以使用

\b(?<!Effective\s)[A-Za-z]{3,9}\s*\d{1,2}\s*,\s*\d{4}(?!\d)

regex demo详情:

  • \b - 单词边界
  • (?<!Effective\s) - 如果 Effective + 紧邻当前位置
  • 左侧的空白字符,则匹配失败的否定后视
  • [A-Za-z]{3,9} - 三到九个 ASCII 字母
  • \s* - 零个或多个空格
  • \d{1,2} - 一位或两位数
  • \s*,\s* - 用零个或多个空格括起来的逗号
  • \d{4} - 四位数
  • (?!\d) - 如果右边有一个数字,则匹配失败的否定前瞻。