正则表达式-计算字符串中冒号的数量

时间:2018-11-13 11:26:33

标签: regex count expression

这里是新消息,如果我错过任何重要信息,表示歉意!

我一直在使用https://regex101.com/来为以下内容构建一些正则表达式-

我想使用一些正则表达式代码,如果文本字符串中的冒号数量为3,则返回true,如果它等于或大于4,则返回false,例如以下文本字符串应返回false-

Bin不在:12:54:38错误的颜色箱在:12:43:17

但这应该返回一个匹配项-

Bin不在:12:54:38

或者,我一直在寻找其他方法来获取相关的响应,例如\ d \ d \ D \ d \ d \ D \ d \ d \ D \ D,即,如果在数字后面有一个字母,则返回真值但是我真的很努力尝试使其工作。

任何一个选项的帮助将不胜感激,因为任何一个都会标记我的需求。

非常感谢!

3 个答案:

答案 0 :(得分:0)

一个简单的正则表达式,用于匹配仅包含3个冒号和3个冒号的字符串:

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

DEMO

答案 1 :(得分:0)

要匹配示例数据中包含冒号3倍的格式,可以使用:

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

Regex demo

那将匹配

  • ^声明字符串的开头
  • [^\r\n:]*否定的字符类,不能匹配回车符,换行符或冒号的0+次
  • (?::\d{2}){3}匹配一个冒号,后跟2位数字并重复3次
  • [^\r\n:]*否定的字符类,不能匹配回车符,换行符或冒号的0+次
  • $声明行的结尾

如果要匹配的值是24h格式,则可以使用此正则表达式

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

Regex demo

答案 2 :(得分:-1)

使用Perl一个衬纸

> 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
>