如何在 python 中编写正则表达式以识别字符串中的日期
How to write a regex in python to recognize days inside a string
在此作业中,需要的输入格式为:
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
你真的不需要正则表达式。您可以直接查找 "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
样式逻辑很有用,所以我仍然把它包括在这里。
在此作业中,需要的输入格式为:
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
你真的不需要正则表达式。您可以直接查找 "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
样式逻辑很有用,所以我仍然把它包括在这里。