使用正则表达式在文本中查找日期
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)
- 如果右边有一个数字,则匹配失败的否定前瞻。
如果日期之前没有单词 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)
- 如果右边有一个数字,则匹配失败的否定前瞻。