我想修改我使用Ruby的字符串的一部分。
字符串为[x, y]
,其中y
是一个整数,我想将其更改为字母。所以说[1, 1]
会变成[1, A]
而[1, 26]
会变成[1, Z]
。
正则表达式能帮我做到这一点吗?或者有更简单的方法吗?我对正则表达式并不强烈,我现在正在读这些。
答案 0 :(得分:1)
我能想到的最短路是以下
string = "[1,1]"
array = string.chop.reverse.chop.reverse.split(',')
new_string="[#{array.first},#{(array.last.to_i+64).chr}]"
答案 1 :(得分:0)
也许这会有所帮助:
因为我们还没有字母表,所以我们可以查找位置,创建一个。 这是一个转换为数组的范围,因此您无需自己指定它。
alphabet = ("A".."Z").to_a
然后我们尝试从字符串中获取整数/位置:
string_to_match = "[1,5]"
/(\d+)\]$/.match(string_to_match)
也许可以改进正则表达式,但是对于这个例子它可以正常工作。 MatchData中的第一个引用是在“string_to_match”中保存第二个整数。 或者你可以通过“$ 1”获得它。 不要忘记将其转换为整数。
position_in_alphabet = $1.to_i
此外,我们需要记住数组索引从0开始而不是1
position_in_alphabet -= 1
最后,我们可以看看我们真正得到的char
char = alphabet[position_in_alphabet]
示例:
alphabet = ("A".."Z").to_a #=> ["A", "B", "C", ..*snip*.. "Y", "Z"]
string_to_match = "[1,5]" #=> "[1,5]"
/(\d+)\]$/.match(string_to_match) #=> #<MatchData "5]" 1:"5">
position_in_alphabet = $1.to_i #=> 5
position_in_alphabet -= 1 #=> 4
char = alphabet[position_in_alphabet] #=> "E"
问候〜