簡體   English   中英

如何修復與此日期匹配的日期正則表達式

[英]How to fix this date regular expression that is matching things it should not

我正在嘗試掃描一些文檔以查找分類問題的日期。 在這里和其他一些地方閱讀后,我構造了以下正則表達式

months='['+'|'.join(calendar.month_abbr[1:])+'|'+'|'.join(calendar.month_name[1:])+']'
techPart='+\\.*\\s*\\d{1,2}[,]?[\\s*][1|2]\\d{3}'
dateExpr=months+techPart

我正在對此字符串進行測試

newString='Mar. 31, 2011 Dec. 31, 2010 bananas Mar. 31, 2011 too much malarky September 1, 1992 redundant Dec. 31, 2010  September 29, 1999  March 12 2004 ddfd  March.    13 2019 ddfd  Mac.    13 2019 ddfd'

當我這樣運行時

for date in re.findall(dateExpr,newString):
print date

我明白了

Mar. 31, 2011
Dec. 31, 2010
Mar. 31, 2011
September 1, 1992
Dec. 31, 2010
September 29, 1999
March 12 2004
March.    13 2019
Mac.    13 2019    #here is my problem

在您的正則表達式months ,您使用方括號,給出類似[Jan|Feb|Mar|...] 那是錯的。 方括號是字符類並匹配括號任意一個字符,所以這將匹配Jan| F等。相反,您想使用括號:

months='(?:'+'|'.join(calendar.month_abbr[1:])+'|'+'|'.join(calendar.month_name[1:])+')'

您需要使用?:因為findall僅返回捕獲的組,因此我們需要將該組標記為非捕獲。

稍后在執行[1|2]正則表達式中,您會遇到相同的問題。 您要(?:1|2)還是只想[12]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM