Ruby:识别四位数字并剪切文本

时间:2010-08-20 14:03:43

标签: ruby date

所以我正在处理一个包含许多年份数字(四位数字)的文本(字符串),我正在尝试将文本划分为多个段,每个段以年份数开头和结尾(无关紧要)如果年份编号包含在细分中)。基本上年份数字只是代码“切割”的信号。

任何想法我怎么能这样做?如何识别四位数

感谢百万!

3 个答案:

答案 0 :(得分:2)

>> 'ab2010cd'.scan(/\D(\d{4})\D/)   # 4 digit numbers match
=> [["2010"]]
>> 'ab201cd'.scan(/\D(\d{4})\D/)    # <4 digit numbers don't match
=> []
>> 'ab20101cd'.scan(/\D(\d{4})\D/)  # >4 digit numbers don't match
=> []
>>

在ruby1.9中,你可以使用lookahead / lookbehind断言进行拆分

>> 'ab2010cd'.split(/(?<=\D)(\d{4})(?=\D)/)
=> ["ab", "2010", "cd"]

答案 1 :(得分:1)

ruby-1.9.2-preview1 > "abc1234tgnh".match(/\d{4}/)
 => #<MatchData "1234"> 

答案 2 :(得分:0)

给出字符串

s = 'abcd 1234 efghijk 56789 nope 0987 blah blah 2010 hmmm'

是否应该有2个或3个匹配(假设“2010 hmmm”子字符串不以一年结束)?我假设你想匹配它(如果没有,从正则表达式中删除|\Z)。

s.scan(/\b\d{4}\b.+?(?=\b\d{4}\b|\Z)/)
# => ["1234 efghijk 56789 nope ", "0987 blah blah ", "2010 hmmm"]

但是,正如你所说,你不关心保持数字:

s.scan(/(?<=\d{4}).+?(?=\b\d{4}\b|\Z)/)
# => [" efghijk 56789 nope ", " blah blah ", " hmmm"]