Python 月份和年份的正则表达式(不包括某些单词)
我正在尝试制作一个正则表达式,它能够处理输入,如bellow,以提取月份和年份,同时处理所有这些不同的情况,并提取两组(开始和结束),如下所示:Python 月份和年份的正则表达式(不包括某些单词),python,regex,Python,Regex,我正在尝试制作一个正则表达式,它能够处理输入,如bellow,以提取月份和年份,同时处理所有这些不同的情况,并提取两组(开始和结束),如下所示: From August 2017 - September 2018 (output: {August 2017},{September 2018}) From August to September 2018 (output: {August},{September 2018}) July 2009 - August 2019
From August 2017 - September 2018 (output: {August 2017},{September 2018})
From August to September 2018 (output: {August},{September 2018})
July 2009 - August 2019 (output: {July 2009},{August 2019})
De Aout 2019 a July 2020 (output: {Aout 2019},{July 2020})
De Juillet a Aout 2020 (output: {Juillet},{Aout 2020})
Juillet - Aout 2019 (output: {Juillet},{Aout 2019})
Juillet a Aout 2019 (output: {Juillet},{Aout 2019})
我发现这个正则表达式做得很好():
我认为,排除/忽略“From”和“De”这样的特定词语是缺少一部分的
有什么想法或解决方案吗?请注意,
\D+
是一种非常通用的模式,它将2018年8月至9月的中的与匹配,即任何1+非数字符号。而且,\w
匹配字母、数字和\uu
s,当您需要匹配月份名称时,只匹配字母可能更合适,为此,您只需从中减去\d
和
([^\w\ud]
)
您可以使用更精确的正则表达式:
(?P<fmonth>[^\W\d_]+(?:\W+\d+)?)\s+(?:to|a|-)\s+(?P<smonth>[^\W\d_]+\W+\d+)
(?P[^\W\d.]+(?:\W++\d+)\s+(?:to | a |-)\s+(?P[^\W\d.]+\W++\d+)
见
详细信息
(?P[^\W\d\]+(?:\W+\d+)
-每月组:1+个字母和1+个非单词字符的可选序列,后跟1+个数字
\s+
-1+空格
(?:to | a |-)
-to
,a
或-
\s+
-1+空格
(?P[^\W\d\]+\W+\d+)
-smonth组:1+字母,1+非单词字符,1+数字
如果您愿意超越regex,我可以推荐Duckling-?你也可以在这里试试-。它从2018年8月到9月运行良好。可能需要一些调整,但这是一个好的开始:(\w+(?:\d{4})(?:-|到| a)(\w+\d{4})
。看这里:@borancar我试过Duckling。。这是一个很好的建议。我以前从未见过它。但不幸的是,它不能很好地处理法语,这对我来说很重要
De Juillet a Aout 2020
From August to September 2018
(?P<fmonth>[^\W\d_]+(?:\W+\d+)?)\s+(?:to|a|-)\s+(?P<smonth>[^\W\d_]+\W+\d+)