2016-03-17 2 views
1

У меня очень длинная и изменяемая строка. Как это:python: строка поиска в изменяемой строке

s = "hello today we see there? Otherwise are available tuesday 10:00 to 18:00. OK?" 

Или это:

s = "hello today we see there? Otherwise are available tue 10.00 to 18.00. OK?" 

Я хочу, чтобы в качестве выходного сигнала:

tuesday 10:00 to 18:00 

Или:

tue 10.00 to 18.00 

Я попытался так:

print re.findall("(tuesday|tue \s\d+:|.\d+\s-\s\d+:|.\d+)",s)[0] 

, но это неправильная информация.

+3

Вы на самом деле не имеют изменяемую строку, поскольку строки Python не изменчивая. –

ответ

0

Вы можете исправить шаблон, как показано ниже:

tue(?:sday)?\s*\d{1,2}[:.]\d{2}\s*(?:-|to)\s*\d+[:.]\d+ 

ВИДЕТЬ regex demo

Примечание вам не нужно использовать чередование, ни захватив группы.

  • tue(?:sday)? - либо tue или tuesday
  • \s* - 0+ пробельные символы
  • \d{1,2} - два или один цифры
  • [:.] - или : или их .
  • \d{2} - ровно 2 цифры
  • \s* - 0+ whit Espace
  • (?:-|to) - либо : или to (обратите внимание, что (?:...) не является захват группы, так что re.findall не мог вернуться в этот результат)
  • \s*\d+[:.]\d+ - 0+ пробельные следовали со временем (которое может быть записано как предыдущий, но, скорее всего, это тоже произойдет), \d+ соответствует 1 или более цифрам.

См Python demo:

import re 
p = re.compile(r'tue(?:sday)?\s*\d{1,2}[:.]\d{2}\s*(?:-|to)\s*\d+[:.]\d+') 
test_str = "hello today we see there? Otherwise are available tuesday 10:00 to 18:00. OK?\nhello today we see there? Otherwise are available tue 10.00 to 18.00. OK?" 
print(p.findall(test_str)) 
# => ['tuesday 10:00 to 18:00', 'tue 10.00 to 18.00'] 
Смежные вопросы