加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如果第一个字符是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或以大写字母开头的字符串,因此无需在块内确定字符串是否大写.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读