所以我正在处理一个包含许多年份数字(四位数字)的文本(字符串),我正在尝试将文本划分为多个段,每个段以年份数开头和结尾(无关紧要)如果年份编号包含在细分中)。基本上年份数字只是代码“切割”的信号。
任何想法我怎么能这样做?如何识别四位数
感谢百万!答案 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"]