выделение времени в тексте

#ruby #regex

#ruby #регулярное выражение

Вопрос:

У меня есть строка: Something 8:45 foo bar foo bar at 23:50

Как выделить и пометить <b> тегом все временные комбинации в строке, такие как 8:45 и 23:50? В результате я хочу иметь Something <b>8:45</b> foo bar foo bar at <b>23:50</b>

Ответ №1:

 >> "Something 8:45 foo bar foo bar at 23:50".gsub(/bd{1,2}:d{2}b/, '<b></b>') 
#=> "Something <b>8:45</b> foo bar foo bar at <b>23:50</b>"
  

Редактировать: если вам нужно, вы можете проверить регулярное выражение на правильное время, но я не стал утруждать себя этим примером.

Ответ №2:

Вы можете сделать это:

 "Something 8:45 foo bar foo bar at 23:50".gsub(/d{1,2}:d{2}/).each {|hour| hour = "<b>#{hour}<b>" }
  

Определите часы и замените каждое из них на <b>hour<b>

Комментарии:

1. Вам не нужно each , gsub можете взять блок. Но на самом деле вам это тоже не нужно, поскольку это можно сделать непосредственно внутри gsub (см. Мой ответ ниже).

Ответ №3:

Используйте следующее регулярное выражение /((2[0-3])|(1[0-9])|(0?[0-9])):([0-5]?[0-9])/ для соответствия, поскольку оно также проверяет, указано ли время в правильном формате

Комментарии:

1. Пожалуйста, объясните, что не так с этим регулярным выражением, поэтому оно получило отрицательный результат

2. Я бы сказал ? в первой цифре минут, поскольку никто не пишет, например, 13:16 вечера. Мне нравится, что вы ограничили регулярное выражение, чтобы оно соответствовало только допустимому времени.

Ответ №4:

легко

заменить ([0-9]{1,2}:[0-9]{1,2}) с помощью ‘$ 1

Комментарии:

1. Это просто возвращает ту же строку. Использование круглых скобок и $1 является избыточным. Используйте $0 вместо этого.