2017-09-21 34 views
1

我的數據(csv)具有以下值 - user_id,time_free,如下所示。正則表達式搜索有效時間

user1 Mon-Wed 10:30 am - 1:00 pm 
user2 Mon-Thu 1:00 pm - 5:00 pm , Fri 10:30 am - 2:00 pm 

我想在Python中使用正則表達式。我沒有得到期望的結果。 我期待在單獨的小組中獲得星期一和時間。

import csv 
import re 

with open('myfile.csv') as csvDataFile: 
    csvReader = csv.reader(csvDataFile) 
    for row in csvReader: 
     pattern = re.compile("([A-Z][a-z][a-z])\S-(\S?)\d?\d:\d\d ] [ap][m]") 
     for (l, n) in re.findall(pattern,row[1]): 
      print(l) 
+0

嘗試在https://regex101.com進行調試,您應該很快發現它爲什麼不匹配。 – jonrsharpe

+0

See ['\ b([AZ] [az] {2})\ s * - \ s * [AZ] [az] {2} \ s *(\ d?\ d:\ d \ d * [ap ] [m])'](https://regex101.com/r/jEZIqV/2) –

+0

Thanks @WiktorStribiżew。感謝您的幫助。 – paddu

回答

1

您可以使用

r'\b([A-Z][a-z]{2})\s*-\s*[A-Z][a-z]{2}\s*(\d?\d:\d\d\s*[aApP][Mm])' 

regex demo

詳細

  • \b - 一個字邊界
  • ([A-Z][a-z]{2}) - 第1組(Mon):大寫字母ASCII和2對小寫那些
  • \s*-\s* - 包圍0+空格字符
  • [A-Z][a-z]{2}連字符 - 大寫字母ASCII和2對小寫那些
  • \s* - 0+空格
  • (\d?\d:\d\d\s*[aApP][Mm]) - 第2組(time):
    • \d? - 任選的數字
    • \d:\d\d - 任何數字,:,2位數字
    • \s* - 0+空格 - [aApP][Mm] - AMPM(不區分大小寫)。