使用正则表达式来评估和修改Ruby中的字符串?

时间:2012-08-22 14:37:10

标签: ruby regex

我想修改我使用Ruby的字符串的一部分。

字符串为[x, y],其中y是一个整数,我想将其更改为字母。所以说[1, 1]会变成[1, A][1, 26]会变成[1, Z]

正则表达式能帮我做到这一点吗?或者有更简单的方法吗?我对正则表达式并不强烈,我现在正在读这些。

2 个答案:

答案 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"

问候〜