Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby/Regex解析字符串_Ruby_Regex - Fatal编程技术网

Ruby/Regex解析字符串

Ruby/Regex解析字符串,ruby,regex,Ruby,Regex,我想获取一个字符串,并仅在其格式有效时将其拆分为一个数组 字符串的有效格式包括: 关键字:Bob值:5000 关键字:Jane值:6000700100 无效格式,除了key:或value:拼写错误之外: 键:Bob值:6000、、、100 我一直在使用gets获取一行代码,并尝试使用以下代码: if line =~ /key:\s\d+\svalue:\s([\d+]+,?)*/ # do stuff end 我还尝试使用===但对于有效字符串和无效字符串都只返回true/not nil

我想获取一个字符串,并仅在其格式有效时将其拆分为一个数组

字符串的有效格式包括:

关键字:Bob值:5000 关键字:Jane值:6000700100 无效格式,除了key:或value:拼写错误之外:

键:Bob值:6000、、、100 我一直在使用gets获取一行代码,并尝试使用以下代码:

if line =~ /key:\s\d+\svalue:\s([\d+]+,?)*/
 # do stuff
end  
我还尝试使用===但对于有效字符串和无效字符串都只返回true/not nil。如何确保多个连续逗号被视为无效?

^键:\s\w+\s值:\s\d+,?++$//更好的验证

:


^?!*,*$//简单的消极前瞻

我倾向于在以下情况下使用拆分:

str = "key: Bob value: 5000,330,200"
 => "key: Bob value: 5000,330,200" 

arr = str.split
 => ["key:", "Bob", "value:", "5000,330,200"] 

if arr[0] == "key:" && arr[2] == "value:" && arr[3].split(",").none?(&:empty?)
  # do stuff
end

我更容易理解。

好奇:^$为什么会有这么大的区别?它们迫使正则表达式跨越整个输入字符串…^在Ruby中,$不是字符串的开始/结束,而是行的开始/结束。您几乎总是想要Ruby中的\A和\z。您想要更好的验证。Ruby不支持//。考虑键、值、*数=StReSt/\s*、s** s+/,然后如果key=key:& &值=value:& &数字。无:&空:.@ CareySwoveland -谢谢,固定。