Regex - подсчет количества двоеточий в строке - PullRequest
0 голосов
/ 13 ноября 2018

Новое здесь, так что извинитесь, если я пропустил какую-либо критическую информацию!

Я использовал https://regex101.com/, чтобы попытаться построить регулярное выражение для следующего -

Я хочуиспользовать некоторый код регулярного выражения для возврата значения true, если число двоеточий в текстовой строке равно 3, и false, если оно равно 4 или более, например, следующая текстовая строка должна возвращать значение false -

Bin Not Out at:12: 54: 38Неверная корзина цветов в: 12: 43: 17

, но это должно вернуть совпадение -

Корзина не вышла в: 12: 54: 38

В качестве альтернативыЯ искал другие методы, чтобы получить соответствующий ответ, такой как \ d \ d \ D \ d \ d \ D \ d \ d \ D, т.е. если есть буква сразу после цифры, возвращающая истинное значение, но яочень трудно пытаться заставить его работать.

Любая помощь по любому из вариантов будет признательна, поскольку любой из них помечает то, что мне нужно.

Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Простое регулярное выражение, соответствующее строкам, содержащим 3 и только 3 двоеточия:

^([^:]*:){3}[^:]*$

DEMO

0 голосов
/ 13 ноября 2018

Чтобы соответствовать формату в ваших примерах данных, содержащих 3 раза двоеточие, вы можете использовать:

^[^\r\n:]*:\d{2}:\d{2}:\d{2}[^\r\n:]*$

Regex demo

Это будет соответствовать

  • ^ Утверждение начала строки
  • [^\r\n:]* Класс отрицательных символов, который не соответствует 0+ раз возврат каретки, новой строки или двоеточия
  • (?::\d{2}){3} Подберите двоеточие, за которым следуют 2 цифры, и повторите это 3 раза
  • [^\r\n:]* Класс отрицательных символов, который не соответствует 0+ раз возврат каретки, перевод строки или двоеточие
  • $ Утверждение конца строки

Если значения, которые нужно сопоставить, имеют формат 24 часа, вы можете использовать это регулярное выражение

^[^\r\n:]*:(?:2[0-3]|[01]?[0-9]):(?:[0-5]?[0-9]):(?:[0-5]?[0-9])[^\r\n:]*$

Regex demo

0 голосов
/ 13 ноября 2018

Использование Perl one liner

> cat colon.dat
Bin Not Out at:12:54:38Wrong Colour Bin at:12:43:17
Bin Not Out at:12:54:38
> perl -ne ' { while(m/(:)/g){$x++} print $x==3 ? "true\n":"false\n"  ; $x=0 } ' colon.dat
false
true
>

или более элегантно

> perl -ne ' { $x++ while(m/(:)/g) ; print $x==3 ? "true\n":"false\n"  ; $x=0 } ' colon.dat
false
true
> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...