При работе с файлом необходимо выполнить поиск строки с отметкой времени в формате H:MM:SS. Я попробовал следующий egrep '[0-9]:[0-9]:[0-9]'. Не работал для меня Что я делаю не так в регулярных выражениях?

3 ответа3

3

если вы хотите соответствовать
С 00:00:00 до 23:59:59

egrep '([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]'t

если вы хотите соответствовать
С 12:00 до 00:59

egrep -i '((?:0[0-9]|1[012]):[0-5][0-9]:[0-5][0-9]\s?(?:a|p)m)'
0

[0-9]:[0-9]:[0-9] будет соответствовать H:M:S, бот не H:MM:SS.

Каждый набор квадратных скобок соответствует одному символу.

Таким образом, чтобы получить что-то, что соответствует H:MM:SS, вы можете использовать:

[0-9]:[0-9][0-9]:[0-9][0-9]

Обратите внимание, что выше НЕ будет соответствовать H:M:S

Для соответствия H:MM:SS ИЛИ H:M:S ИЛИ H:M:SS ИЛИ H:MM:S используйте следующее

[0-9]:[0-9]+:[0-9]+

+ означает совпадение с последним символом, 1 или более раз (включая первое совпадение)

0

Я предлагаю вам использовать

egrep '[0-9]{2}:[0-9]{2}:[0-9]{2}'

где {2} означает совпадение с последним символом как минимум два раза и максимум два раза (= ровно два раза), где последний символ в этом примере был числом от 0 до 9.

Если вы хотите найти по крайней мере один и максимум два, вы должны изменить его на

egrep '[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}'

что соответствует, например, 0:1:22 и 0:11:22 и 00:11:22 и 00:11:2 и так далее.

Ответ Sirius_Black дал также тестирование в реальном времени. Мой ответ будет соответствовать нереалистичным временам, таким как 99:99:99, что, однако, может быть продолжительностью.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .