python - 如何在 python 中编写正则表达式来识别字符串中的日期

标签 python regex search built-in findall

在此作业中,所需的输入采用以下格式:

Regular: 16Mar2009(mon), 17Mar2009(tues), 18Mar2009(wed) ...

Reward: 26Mar2009(thur), 27Mar2009(fri), 28Mar2009(sat)

常规或奖励是客户类型的名称。我像这样分开了这个字符串。

entry_list = input.split(":") #input is a variable  
client = entry_list[0] # only Regular or Reward  
dates = entry_list[1] # only dates  
days = dates.split(",")       

但现在我需要在日期列表中计算工作日或周末:

days = [' 16Mar2009(mon)', ' 17Mar2009(tues)', ' 18Mar2009(wed)']    

当周一周二周三周四周五时,都算作工作日,我需要知道输入有多少个工作日。

当星期六太阳必须算作周末,我需要知道输入有多少个周末。

如何在 python 中编写正则表达式来搜索此列表中的所有工作日和周末并对其进行计数,将工作日和周末的数量放入两个不同的计数器中?

编辑

我编写了这个函数来检查日期是否采用写入格式,但它不起作用:

def is_date_valid(date):
    date_regex = re.compile(r'(?:\d{1,2}[A-Za-z]{3}\d{4}\([A-Za-z]{3}\),\s+){2}\d{1,2}[A-Za-z]{3}\d{4}\([A-Za-z]{3}\)$')
    m = date_regex.search(date)

m 只返回 None

最佳答案

您实际上并不需要正则表达式。您可以直接查找“sat”和“sun”标签,因为您的日期格式相同(即没有大写,没有“tue”而不是“tues”等),您不需要概括为图案。只需循环列表并查找“sat”和“sun”:

import re #if you are using the re

days = [' 16Mar2009(mon)', ' 17Mar2009(tues)', ' 18Mar2009(wed)', ' 18Mar2009(sat)', ' 18Mar2009(sun)']
weekends = 0
weekdays = 0

for day in days:
  if "sat" in day or "sun" in day:  #if re.search( '(sat|sun)', day ): also works
    weekends = weekends+1
  else:
    weekdays = weekdays+1

print(weekends)
print(weekdays)

>>>2
>>>3

如果您需要使用正则表达式,因为这是赋值的一部分,那么 if 语句的这种变体就可以做到这一点:if re.search( '(sat|sun)', day ): 这并不比仅使用字符串有用太多,因为在本例中字符串正则表达式,但是了解如何使用 or 样式逻辑将多个模式组合到一个正则表达式中非常有用,因此我仍然将其包含在此处。

关于python - 如何在 python 中编写正则表达式来识别字符串中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55386453/

相关文章:

python - 通过邮件发送创建的绘图

ruby-on-rails - 搜索标签 act_as_taggable_on rails

python - numpy -- 将非连续数据转换为连续数据

python - 使用大数据集进行 scikit-learn 向量化

python - 从字节而不是文件名读取以转换音频

regex - sed 替换命令在 Mac 上不起作用

regex - 正则表达式匹配以特定单词开头的字符串

java - Java中的正则表达式有什么问题

c - 搜索文件并返回值 - 超快

.net - 搜索中的重要数据结构