2012-08-22 65 views
2

我想修改我使用Ruby的一部分字符串。使用正則表達式來評估和修改Ruby中的字符串?

字符串是[x, y]其中y是我想要更改爲其英文字母的整數。所以說[1, 1]將成爲[1, A][1, 26]將成爲[1, Z]

一個正則表達式能幫我做到這一點嗎?還是有更簡單的方法?我不會用正則表達式來強調,我現在正在閱讀這些內容。

+0

看起來你有一個字符串,你應該有一個元組? – Reactormonk

+0

那麼我在做什麼是改變我的Excel單元格的索引。我正在使用的寶石給我的索引[1,1]等,我只是想改變它爲列格式[1,A] –

+0

MS Excel可以處理:選擇工具 - >選項 - >常規選項卡 - > R1C1參考樣式。 – steenslag

回答

1

我能想到的最簡單的辦法是以下

string = "[1,1]" 
array = string.chop.reverse.chop.reverse.split(',') 
new_string="[#{array.first},#{(array.last.to_i+64).chr}]" 
+0

這個工程!謝謝。 –

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 = 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" 

G reetings〜

相關問題