2014-02-21 87 views
1

我想知道是否存在要解決在像例如以下Splite字符串爲文本和整數

例如 「T12」 =>文本=「T」紅寶石問題的快速方法,值= 12

「AD15」=>文本= 「廣告」,值= 15

「acbds1687」=>文本= 「acbds」,值= 1687

我想正則表達式可以解決這一點,但我不知道關於正則表達式。

+0

在您的示例中,字符串中沒有空格。讀者會認爲這是一個要求,這不是問題。但是,如果你想要一個更一般的解決方案,現在是時候這樣說了(通過編輯,給出你給出的字符串以及你想要提取的字符串的附加例子)。 –

+0

我有一個字母與字母和整數結合,我想分裂它。問題是它互相關閉,很難分裂,我不想計算每個字符串元素。 –

回答

2

象下面這樣:

irb(main):001:0> "t12".split(/(?<=[a-zA-Z])(?=\d)/) 
=> ["t", "12"] 
+0

真棒:)工作像一個魅力 –

1

爲了解析字符串轉換爲一個哈希像{ :text => "t", :value => 12 }

def parse (string) 
    matchdata = string.match(/([a-zA-Z]+)([\d]+)/) 
    text = matchdata[1] 
    value = matchdata[2].to_i 

    return { text: text, value: value } 
end 

爲了解析字符串爲數組一樣["t", 12]

def parse (string) 
    matchdata = string.match(/([a-zA-Z]+)([\d]+)/) 
    text = matchdata[1] 
    value = matchdata[2].to_i 

    return [text, value] 
end 
2

如果您給創建一個捕獲組它留在拆分,因此這段代碼是非常光滑的:

text, value = string.split(/(\d+)/) 

或者您可以使用切片!方法:

text = 'sagasg125512' 
value = text.slice!(/\d+/) 
p text #=> "sagasg" 
p value #=> "125512"