使用正则表达式捕获德语日期格式

2024-04-29 14:04:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我不(需要)关心性能

我的正则表达式与日期格式dd.mm.yyyy匹配

((([0][1-9]|[12][\d])|[3][01])[./]([0][13578]|[1][02])[./][1-9]\d\d\d)|((([0][1-9]|[12][\d])|[3][0])[./]([0][13456789]|[1][012])[./][1-9]\d\d\d)|(([0][1-9]|[12][\d])[-/][0][2][./][1-9]\d([02468][048]|[13579][26]))|(([0][1-9]|[12][0-8])[./][0][2][./][1-9]\d\d\d)

这是我的正则表达式还不匹配的日期感谢您的帮助。

09. Juni 1997
01.Aug.1995
27.06. 1997
29.02.1996
21. 01. 1999
28.05. 1996
07..4..1995
20:03:1998
9.4.1997
14 .03 - 1995

我开始尝试添加月份字母,但失败了(可能是因为它们之间有空格)

这是一个用于验证月份信函订单的正则表达式(1月、2月、马尔兹、4月、Mai、Juni、8月、9月、Oktober、11月、Dezember)

(?:J(anuar|u(n|li))|Februar|Mä(rz|i)|A(pril|ugust)|(((Sept|Nov|Dez)em)|Okto)ber)

我在互联网上发现了这一点,如果这个月只有3封信的话,它就会关注这个问题

(((([1-9])|([0][1-9])|([1-2][0-9])|(30))\-([A,a][P,p][R,r]|[J,j][U,u][N,n]|[S,s][E,e][P,p]|[N,n][O,o][V,v]))|((([1-9])|([0][1-9])|([1-2][0-9])|([3][0-1]))\-([J,j][A,a][N,n]|[M,m][A,a][R,r]|[M,m][A,a][Y,y]|[J,j][U,u][L,l]|[A,a][U,u][G,g]|[O,o][C,c][T,t]|[D,d][E,e][C,c])))\-[0-9]{4}$)|(^(([1-9])|([0][1-9])|([1][0-9])|([2][0-8]))\-([F,f][E,e][B,b])\-[0-9]{2}(([02468][1235679])|([13579][01345789]))$)|(^(([1-9])|([0][1-9])|([1][0-9])|([2][0-9]))\-([F,f][E,e][B,b])\-[0-9]{2}(([02468][048])|([13579][26]))

Tags: 订单格式字母性能ddmm空格月份
1条回答
网友
1楼 · 发布于 2024-04-29 14:04:08

你可以用

pattern = r"""(?x)(?<!d)(?:
  (?:(?:0?[1-9]|[12]\d)|3[01])\s?[./:-][\s.]?(?:0?[13578]|1[02]|J(?:an(?:uar)?|uli?)|M(?:ärz?|ai)|Aug(?:ust)?|Dez(?:ember)?|Okt(?:ober)?)\s?(?:[./:-][\s.]?)?[1-9]\d\d\d|
  (?:(?:0?[1-9]|[12]\d)|30)\s?[./:-][\s.]?(?:0?[13-9]|1[012]|J(?:an(?:uar)?|u[nl]i?)|M(?:ärz?|ai)|A(?:pr(?:il)?|ug(?:ust)?)|Sep(?:tember)?|(?:Nov|Dez)(?:ember)?|Okt(?:ober)?)\s?(?:[./:-][\s.]?)?[1-9]\d\d\d|
  (?:0?[1-9]|[12]\d)\s?[./:-][\s.]?(?:0?2|Fe(?:b(?:ruar)?)?)\s?(?:[./:-][\s.]?)?[1-9]\d(?:[02468][048]|[13579][26])|
  (?:0?[1-9]|[12][0-8])\s?[./:-][\s.]?(?:0?2|Fe(?:b(?:ruar)?)?)\s?(?:[./:-][\s.]?)?[1-9]\d\d\d
)(?!\d)"""

regex demo

主要POI:

  • 月份正则表达式是(?:J(?:an(?:uar)?|u[nl]i?)|Fe(?:b(?:ruar)?)?|M(?:ärz?|ai)|A(?:pr(?:il)?|ug(?:ust)?)|Sep(?:tember)?|(?:Nov|Dez)(?:ember)?|Okt(?:ober)?),它被测试为here。根据您认为合适的情况调整短接
  • Febraury模式分别用于最后两个备选方案(它们专门用于二月),其余备选方案从月份模式中减去
  • 从第一次轮换开始,对于31天的月份,将删除2月、4月、6月、9月和11月
  • 通过在0之后添加?量词,使日和月的前导零成为可选的
  • 天和月之间的分隔符更改为\s?[./:-][\s.]?:可选空格、来自./:-字符集的字符,然后是可选空格或.
  • 月和年之间的分隔符更改为\s?(?:[./:-][\s.]?)?:一个可选空格,然后是来自./:-字符集的字符的可选序列,然后是可选空格或.

数字边界(?<!\d)/(?!\d)添加在两端,以确保匹配的两端没有其他数字

相关问题 更多 >