2015-08-26 1 views
1

Я пытаюсь создать приложение отслеживания времени, которое должно анализировать строку, которая может иметь (но не всегда) время в ней в одном из многих форматов или комбинаций. Форматы я проверка на этоRegex pattern для соответствия времени, например '1h 10m'

  • ч | ч | ч | часов
  • м | мин | мин | мин

Они могут быть с пробелом в промежутке между числом и час или минуты и могут быть объединены или только один или другой. Некоторые примеры:

  • 1 час 20 минут
  • 2ч 15 м

Регулярное выражение для сопоставления раз, что у меня есть в данный момент:

((\d+(\.\d+)?)\s*(h|hr|hrs|hours))?(\s*(\d+)\s*(m|min|mins|minutes))? 

Это прекрасно работает если я просто передам ему строку времени без чего-либо перед этим. Моя проблема в том, что я хочу разобрать полную текстовую строку со временем, появляющимся в любом месте. Некоторые примеры:

  • является записью некоторого времени для работы 1ч 15й
  • 2h 45mins Это запись некоторого времени для работы
  • Это запись времени 1часов 25 минут для некоторых работ
  • Этих является записью времени для некоторых работ

Есть ли у кого-нибудь какие-либо предложения по решению этого вопроса?

+0

Может быть, [ '((\ D + (?.? \ \ D +)) \ S * (?: ч | ч (?:? Г | RS))) ? (?:? \ S * ((\ D +) \ S * (: мин | мин | м))?) '] (https://regex101.com/r/mZ6oB9/2)? –

ответ

0

Все, что вам действительно нужно сделать с вашим, заключается в том, чтобы сделать необязательным необязательное количество символов s и добавить токены границы слова.

Попытка:

\b((\d+(\.\d+)?)\s*(h|hr|hrs?|hours?))?(\s*(\d+)\s*(m|min|mins?|minutes?))?\b 
+0

Отличный ответ, спасибо! Это была граница слов, в которой я в основном застрял, это полезный новый, который нужно запомнить. Благодаря! – tanc

Смежные вопросы