Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用python编写正则表达式来识别字符串中的天数_Python_Regex_Search_Built In_Findall - Fatal编程技术网

如何用python编写正则表达式来识别字符串中的天数

如何用python编写正则表达式来识别字符串中的天数,python,regex,search,built-in,findall,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 Regul

在本作业中,所需输入的格式如下:

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”:


如果您需要使用正则表达式,例如,因为这是赋值的一部分,那么
if
语句的这个变体就可以做到:
if re.search(“(sat | sun)”,day:
这并不比只使用字符串有用,因为在这种情况下字符串就是正则表达式,但是,看看如何使用
样式逻辑将多个模式组合到一个正则表达式中是很有用的,所以我仍然在这里包含它。

到目前为止您尝试了什么?我用我尝试过的进行了编辑。好的,很酷。我正要添加一个更新。如果您需要使用正则表达式,因为它是赋值或其他内容的一部分,那么您可以使用
If-re.search(“([sat][sun]),day:
代替当前的If语句,但它变化不大,因为您的正则表达式仍然是“sat”和“sun”。这不是使用多字符
正则表达式的方式。您的捕获组正在搜索这两个字符串中的任意一个(逗号分隔):
ss、su、sn、as、au、an、ts、tu、tn
。您需要的是
如果重新搜索('(周六|周日):
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