正则表达式搜索有效时间

时间:2017-09-21 20:53:46

标签: python regex

我的数据(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中使用正则表达式。我没有得到理想的结果。 我希望Mon和时间分开。

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)

1 个答案:

答案 0 :(得分: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字母和两个小写的字母
  • \s* - 0+ whitespaces
  • (\d?\d:\d\d\s*[aApP][Mm]) - 第2组(time):
    • \d? - 可选数字
    • \d:\d\d - 任意数字,:,2位
    • \s* - 0+空格 - [aApP][Mm] - AMPM(不区分大小写)。