Ruby/Regex解析字符串
我想获取一个字符串,并仅在其格式有效时将其拆分为一个数组 字符串的有效格式包括: 关键字:Bob值:5000 关键字:Jane值:6000700100 无效格式,除了key:或value:拼写错误之外: 键:Bob值:6000、、、100 我一直在使用gets获取一行代码,并尝试使用以下代码: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
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 -谢谢,固定。