2012-03-28 127 views
0

我在一个循环中有一堆输入文件,我从中提取标签。不过,我想分开一些单词。传入的字符串格式为cs ###,其中### =>是0-9中的任意数字。我希望结果是cs ###。我发现的最接近的答案是这样的,Regex to separate Numeric from Alpha。但我无法得到这个工作,因为字符串正在预定义(静态)和我的变化。单词正则表达式红宝石

找到答案: 没关系,我找到了答案下面sperates字母数字字符,并删除任何不需要的非字母数字字符等等之类AB5 @ $ 6%=任何> AB 56

gsub(/(?<=[0-9])(?=[a-z])|(?<=[a-z])(?=[0-9])/i, ' ').gsub(/[^0-9a-z ]/i, ' ') 

回答

3

如果你的字符串是一样的东西

str = "cs3232 
cs23 
cs423" 

然后,你可以这样做

str.scan(/((cs)(\d{1,10}))/m).collect{|e| e.shift; e } 
# [["cs", "3232"], ["cs", "23"], ["cs", "423"]] 
+0

ŧ他出于某种原因给我语法错误 – user1290757 2012-03-28 18:06:43

+1

什么样的语法错误?这对我行得通。 'scan'是这项工作的正确工具。 – tadman 2012-03-28 18:21:19

+0

'str.scan(/((cs)(\ d {1,10}))/ m).each {| e | e.shift}'也适用,并且更短 – Reactormonk 2012-03-28 19:05:05