2014-02-21 45 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"