Python 显示为YYYY的日期的正则表达式
有人能帮助我使用python正则表达式,它完全以Python 显示为YYYY的日期的正则表达式,python,regex,date,Python,Regex,Date,有人能帮助我使用python正则表达式,它完全以yyyy格式匹配日期,即它不应该匹配任何日期,例如mm-dd-yyyy/Month-dd,yyyyy/dd-Month,yyyy等 在文本以yyyy开头的地方很容易找到这样的匹配项。但是当它在中间或末端时变得越来越困难。strong>所有其他格式的日期都已匹配。因此要避免重复。 例: “1984年的火车事故造成了巨大的死亡人数”-应该匹配 “其中一名伤者于1984年6月10日受伤死亡”不应匹配 “1984年9月15日…”不应该匹配 仅匹配年份字段的
yyyy
格式匹配日期,即它不应该匹配任何日期,例如mm-dd-yyyy
/Month-dd,yyyyy
/dd-Month,yyyy
等
在文本以yyyy
开头的地方很容易找到这样的匹配项。但是当它在中间或末端时变得越来越困难。strong>所有其他格式的日期都已匹配。因此要避免重复。
例:
1984年9月15日
…”不应该匹配\d{4}
但这还不够。
我们必须禁止在该年发生之前:
- 3个字母(月)和一个空格
- 然后是两个数字(天)和一个空格
\w{3}
的两个实例替换为:
(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
编辑
另一个解决方案是,“意识到”月份全名是:
最初捕获两组:
- 可选的“信封”(非捕获)组,包括:
- 一个单词(捕捉第一组,可能是月份名称)
- 一个空格、两位数字(天)、可选逗号和一个空格
- 然后是4位数字(捕捉组编号2)
(?:(\w+) \d{2},* )?(\d{4})
然后,在后处理阶段,您必须:
- 检查第一个捕获的组是否包含完整组或缩写组 任何月份的名称
- 拒绝之前测试成功的情况
您要查找的年份字段。那么您只需要一个四位数的数字
\b\d{4}\b
是否可以在1984年9月15日的中匹配1984?条件是四位数字不应该跟在月名(一月或一月或九月或九月)
/日期数字(10,10-
后面加空格<1984年9月15日<代码>中的代码>1984
不应匹配<代码>\b\d{4}\b与任何内容都不匹配。单词结尾不能与数字一起使用。如果我错了,请纠正我。在后处理过程中,regex并不是为不规则模式而发明的(即,模式之间有很大差异,例如1948年1月15日和1948年1月15日)。一个覆盖所有可能的情况的正则表达式模式将是巨大而可笑的低效。只剩下4位数字。
(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)
(?:(\w+) \d{2},* )?(\d{4})