#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
вместо этого.