如何检查字符串是否仅包含paranthesis,逗号,数字以及用字符串分隔的“urld”的任意组合?它应该始终采用以下形式:
(0,3),u,r,u,l,u #True
(0,3),u,r,u,l,u #True
(0,3),u,r,u,l u #False because of space b/w l and u
我试过这样的事情,但好像我没事了:
if !misc_text.match(/^(\d+,\d+\)(,[udlr])+)/)
答案 0 :(得分:1)
也许你需要这个正则表达式:/^(\(\d+,\d+\)(,[udlr])+)$/
。
答案 1 :(得分:1)
这些例子表明并非所有的字母都是'u','r','l','d'。我假设字符串可以包含这四个字母中的每一个的任意数量(除了其他允许的字符)。我还假设'urld'与字符串分隔的任意组合'意味着这四个字符的每一对必须由一个或多个其他允许的字符分隔。这是实现这一目标的一种方法:
def check_it(s)
(s.chars.chunk {|c| c =~ /[urld]/}.to_a.size == s.count('urld') &&
s =~ /^[(),\durld]*$/) ? true : false
end
check_it('(0,3),u,r,u,l,u') #=> true
check_it('(0,3),u,r,u,l u') #=> false
check_it('(0,3),u,r,u,lu') #=> false
假设
s = '(0,3),u,r,u,lu'
然后
a = s.chars.chunk {|c| c =~ /[urld]/}.to_a
#=> [[0, ["u"]], [0, ["r"]], [0, ["u"]], [0, ["l", "u"]]]
a.size #=> 4
s.count('urld') #=> 5
在a.size < s.count('urld')
时,count_it()
会返回false
如果相反:
s = '(0,3),u,r,u,l u'
然后
s.chars.chunk {|c| c =~ /[urld]/}.to_a.size
#=> a = [[0, ["u"]], [0, ["r"]], [0, ["u"]], [0, ["l"]], [0, ["u"]]]
# a.size => 5
# 5 == s.count('urld') => true
但
s =~ /^[(),\durld]*$/ #=> nil
所以check_it() => false
。
答案 2 :(得分:0)