如果第一个字符是Ruby中的大写字母,如何删除前3个字符
发布时间:2020-12-17 01:50:39 所属栏目:百科 来源:网络整理
导读:我有一个数组[“Ac,Ab,Aa”,“Ba,Bb,Bd”,“Ca,Cc,Cb”,“aA,aC,aD”,“bD,bA,bB”,“cB,cA,CC“. 如果第一个字符是循环中的大写,我想删除前三个字符,以便我可以使用每个输出. 第一个循环后我想要的输出是 ["Ab,Aa","Bb,Bd","Cc,Cb","aA,aD","bD,bB","cB,cC"
我有一个数组[“Ac,Ab,Aa”,“Ba,Bb,Bd”,“Ca,Cc,Cb”,“aA,aC,aD”,“bD,bA,bB”,“cB,cA,CC“.
如果第一个字符是循环中的大写,我想删除前三个字符,以便我可以使用每个输出. 第一个循环后我想要的输出是 ["Ab,Aa","Bb,Bd","Cc,Cb","aA,aD","bD,bB","cB,cC"] 我正在尝试以下但我是堆栈. arr1 = ["Ac,"Ba,"Ca,cC"] def eliminatecolumn(arr) arr.map do |item| if item[0]=~/[A-Z]/ item[0..2]='' end end end eliminatecolumn(arr1) 我得到[“”,“”,nil,nil]. 我是Ruby的新手,我很欣赏任何输入.先感谢您. 解决方法
码
a.map { |str| str.sub(/..,/) { |s| (s == s.capitalize) ? "" : s } } #=> ["Ab,cC"] 说明 当给String#sub一个块时,匹配被传递给块并且块确定替换. (如果没有匹配则传递nil.)例如,何时 str = "Ac,Aa" 比赛是 s = "Ac,Aa"[/..,/] #=> "Ac," 所以 (s == s.capitalize) ? "" : s 变 ("Ac," == "Ac,") ? "" : "Ac," 导致“Ac”被替换为空字符串.通过对比,如果 str => "aA,aD" 比赛是 s = "aA,aD"[/..,/] #=> "aA," 所以 (s == s.capitalize) ? "" : s } 变 ("aA" == "AA") ? "" : "aA" } 使“aA”分配其当前值(即保持不变). 最初我有str.gsub(/^..,/),需要使用anchor ^将替换限制为前三个字符,但由于每个字符串只有一个(可能的)替换,因此可以使用sub,从而消除了需要锚. 替代 此解决方案的变体如下: a.map { |str| str.sub(/[A-Z].,/) { |s| s ? "" : s } } 由于块变量是nil或以大写字母开头的字符串,因此无需在块内确定字符串是否大写. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |