我有一些字符串:
1:2:3:4:5
2:3:4:5
5:3:2
6:7:8:9:0
如何查找具有确切冒号数的字符串?
示例我需要找到4个冒号的字符串。
结果:
1:2:3:4:5
和6:7:8:9:0
Edit:
无论冒号之间有什么文字,都可以这样:
qwe:::qwe:
:998:qwe:3ee3:00
我必须指定number
冒号,但使用regexp_matches
。
它类似于过滤器来搜索破碎的字符串。
感谢。
答案 0 :(得分:0)
您想要使用量词语法{4}
。量词用于指示前一个捕获组需要发生n
次才能满足匹配条件。找到由分号分隔的五位数的模式。像下面这样的东西会起作用。
((\d\:){4}\d)
我假设您可能需要任何数字或单词字符,但不能使用空格或标点符号。在这种情况下,请使用单词character(\w
)。
((\w)[\:]){4}(\w))
但根据您对该模式的处理方式,您可能需要使用不同的正则表达式。如果您希望捕获并替换所有冒号,同时保持数字完整,则您的模式需要使用字符串替换或更高级的分组。
答案 1 :(得分:0)
任意数量的任何字符,包括4:
((.*:){4}.*)
答案 2 :(得分:0)
N是您搜索的数字:
"^([^:]*:){N}[^:]*$"
这是一个测试:
for s in ":::foo:bar" "foo:bar:::" "fo:o:ba::r" ; do echo "$s" | egrep "^([^:]*:){4}[^:]*$" ; done
更改4到3和5,看它不匹配。
也许postgresql需要特定的标志或屏蔽某些元素。
"^([^:]*:){N}[^:]*$"
"^ $"
# matching the whole String/Line, not just a part
"([^:]*:){N}[^:]*"
"( ){N}[^:]*"
# N repetitions of something, followed by an arbitrary number of non-colons (maybe zero)
"([^:]*:)"
# non-colons in arbitrary number (including zero), followed by a colon