Ruby如何提取字符串中单引号内的纯数字?求通用解决方案
提取单引号内数字的通用解决方案
嘿,我明白你的需求了——你想从字符串里只提取单引号包裹区域内的数字,而不是把整个字符串里的数字都捞出来(之前的方法就不小心把开头的9-9也转换成99带进去了)。这里给你一个通用的Ruby方案,完美适配这类场景:
核心思路
- 精准定位单引号包裹的内容:用正则捕获单引号
'之间的所有字符(排除单引号本身) - 从捕获到的内容里过滤出所有数字,去掉非数字字符(空格、字母啥的都能清掉)
代码实现(单个单引号对场景)
foo = "bar9-9 '11001100 11110000 A'A\n" # 第一步:匹配第一个单引号内的内容,第二步:提取其中所有数字 target = foo.match(/'([^']+)'/)[1].gsub(/\D/, '') puts target # 输出:1100110011110000
代码解释
foo.match(/'([^']+)'/):这个正则会找到字符串中第一组单引号对,括号里的[^']+用来匹配单引号之间的所有非单引号字符,并且通过捕获分组保存这部分内容[1]:取出捕获分组里的内容(也就是单引号内的原始字符串:11001100 11110000 A)gsub(/\D/, ''):把所有非数字字符(\D匹配非数字)替换为空,最终得到纯数字串
扩展:处理多个单引号对的场景
如果你的字符串里有多个单引号包裹的内容,比如foo = "bar9-9 '11001100 11110000 A'A '1234 5678'\n",可以用scan来批量处理:
foo = "bar9-9 '11001100 11110000 A'A '1234 5678'\n" results = foo.scan(/'([^']+)'/).flatten.map { |content| content.gsub(/\D/, '') } puts results.inspect # 输出:["1100110011110000", "12345678"]
这个方案的好处是完全聚焦在单引号内部的内容,不管字符串其他位置有多少干扰数字,都不会被误提取,完美满足你的通用需求~
内容的提问来源于stack exchange,提问作者Kev
相关产品推荐
相关产品推荐

