Как написать регулярное выражение в Python для распознавания дней внутри строки - PullRequest
1 голос
/ 28 марта 2019

В этом назначении требуемый ввод имеет следующий формат:

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

1 Ответ

1 голос
/ 28 марта 2019

Вам не нужно регулярное выражение для этого.Вы можете просто искать теги «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, полезны, поэтому я все еще включаю их здесь.

...