第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式用于從python中的字符串中提取所有復雜的日期格式

正則表達式用于從python中的字符串中提取所有復雜的日期格式

慕斯709654 2021-04-09 17:19:18
我有以下字符串: dateEntries = "04-20-2009; 04/20/09; 4/20/09; 4/3/09; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009; 20 Mar 2009; 20 March 2009; 2 Mar. 2009; 20 March, 2009; Mar 20th, 2009; Mar 21st, 2009; Mar 22nd, 2009; Feb 2009; Sep 2009; Oct 2010; 6/2008; 12/2009; 2009; 2010"在這里,我想使用提取所有提到的日期regex。作為嘗試,我寫了以下內(nèi)容regex:import reregEx = r'(?:\d{1,2}[-/th|st|nd|rd\s]*)?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z\s,.]*(?:\d{1,2}[-/th|st|nd|rd)\s,]*)?(?:\d{2,4})'re.findall(regEx, dateEntries)我期望這可以工作,但它只返回日期的子集。A = ['Mar 20, 2009', 'March 20, 2009', 'Mar. 20, 2009', 'Mar 20 2009', '20 Mar 2009', '20 March 2009', '2 Mar. 2009', '20 March, 2009', 'Mar 20th, 2009', 'Mar 21st, 2009', 'Mar 22nd, 2009', 'Feb 2009', 'Sep 2009', 'Oct 2010']我不明白為什么它不返回日期:B=[04-20-2009; 04/20/09; 4/20/09; 4/3/09; 6/2008; 12/2009; 2009; 2010"]我regEx通過擴展來創(chuàng)建了r'(?:\d{1,2}[-\s\/])?(?:\d{1,2}[-\/\s])?(?:\d{2,4})'B ,它對B集有效。但是regEx卻無法產(chǎn)生A+B任何人都可以幫助制作正則表達式以提取我提到的所有日期dateEntries嗎?注意:我只想使用正則表達式解決此問題。
查看完整描述

3 回答

?
翻過高山走不出你

TA貢獻1875條經(jīng)驗 獲得超3個贊

您只是?在該(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)組之后遺漏了一個,以將其標記為不必要。另外,我+在最后兩個組后面添加了一個后綴,以確保正則表達式不會將“ 2009年3月20日”之類的日期拆分為兩個不同的日期。


完整代碼:


import re


regEx = r'(?:\d{1,2}[-/th|st|nd|rd\s]*)?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)?[a-z\s,.]*(?:\d{1,2}[-/th|st|nd|rd)\s,]*)+(?:\d{2,4})+'


dateEntries = "04-20-2009; 04/20/09; 4/20/09; 4/3/09; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009; 20 Mar 2009; 20 March 2009; 2 Mar. 2009; 20 March, 2009; Mar 20th, 2009; Mar 21st, 2009; Mar 22nd, 2009; Feb 2009; Sep 2009; Oct 2010; 6/2008; 12/2009; 2009; 2010"

result = re.findall(regEx, dateEntries)

print(result)

如果您的日期有前導空格,則結(jié)果也將有前導空格。如果繼續(xù)使用日期字符串,則可以使用以下方法將其刪除:.strip()


查看完整回答
反對 回復 2021-04-20
?
臨摹微笑

TA貢獻1982條經(jīng)驗 獲得超2個贊

您的正則表達式模式是完全不可讀的。請使用簡單的構(gòu)建塊來構(gòu)建您的正則表達式模式。這將使代碼更具可讀性


import re

import calendar


full_months = [month for month in calendar.month_name if month]

short_months = [d[:3] for d in full_months]

months = '|'.join(short_months + full_months)


sep = r'[.,]?\s+'               # seperator

day = r'\d+'

year = r'\d+'

day_or_year = r'\d+(?:\w+)?'


r = re.compile(rf'(?:{day}{sep})?(?:{months}){sep}{day_or_year}(?:{sep}{year})?')

r.findall(dateEntries)

# ['Mar 20, 2009', 'March 20, 2009', 'Mar. 20, 2009', 'Mar 20 2009', '20 Mar 2009', '20 March 2009', '2 Mar. 2009', '20 March, 2009', 'Mar 20th, 2009', 'Mar 21st, 2009', 'Mar 22nd, 2009', 'Feb 2009', 'Sep 2009', 'Oct 2010']


查看完整回答
反對 回復 2021-04-20
?
揚帆大魚

TA貢獻1799條經(jīng)驗 獲得超9個贊

試試正則表達式:

^(?:\d{1,2}(?:(?:-|/)|(?:th|st|nd|rd)?\s))?(?:(?:(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)(?:(?:-|/)|(?:,|\.)?\s)?)?(?:\d{1,2}(?:(?:-|/)|(?:th|st|nd|rd)?\s))?)(?:\d{2,4})$


查看完整回答
反對 回復 2021-04-20
  • 3 回答
  • 0 關注
  • 299 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號