【问题标题】:How to write a regex in python to recognize days inside a string如何在 python 中编写正则表达式来识别字符串中的日期
【发布时间】:2019-08-18 13:35:18
【问题描述】:

在这个作业中,需要的输入格式如下:

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

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

Regular 或 Reward 是客户类型的名称。我是这样分隔这个字符串的。

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

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我用我试过的东西编辑了。

标签: python regex search built-in findall


【解决方案1】:

您实际上并不需要正则表达式。您可以直接查找“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 ): 这并不过分比仅仅使用字符串更有用,因为在这种情况下,字符串 are 是正则表达式,但是查看如何使用 or 样式逻辑将多个模式放在一个正则表达式中很有用,所以我仍然包含它在这里。

【讨论】:

  • 好酷。我正要添加更新。如果您 需要 使用正则表达式,因为这是分配或其他内容的一部分,您可以使用 if re.search('([sat][sun])', day): 代替当前的 if 语句,但它并没有太大变化,因为您的正则表达式仍然只是“sat”和“sun”。
  • 这不是您使用正则表达式处理多字符or 的方式。您的捕获组正在搜索以下两个字符串中的任何一个(逗号分隔):ss,su,sn,as,au,an,ts,tu,tn。你想要的是if re.search( '(sat|sun)', day ):
猜你喜欢
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多