拆分和维护分隔符

时间:2014-02-26 21:59:50

标签: ruby regex string-split

  

1997年9月,等等

我需要将上述文本拆分为

September 1997
such and such

分隔符是1997,即

  

/ [0-9] [0-9] [0-9] [0-9] \,/

如何通过正则表达式在ruby中完成?

这是我的尝试:

  

“1997年9月,这样和   这种” .to_s.split(/ \ S +(?= [0-9] [0-9] [0-9] [0-9] \,)/)

输出:

September
1997, such and such

我想要的是:

September 1997
such and such

3 个答案:

答案 0 :(得分:0)

请注意,这只会拆分一次,但这似乎就是你想要的?

str = "September 1997, such and such"
p str.match(/(.*?)([0-9]{4}.*)/)
# => #<MatchData "September 1997, such and such" 1:"September " 2:"1997, such and such">

这会进行多次拆分(由于p11y而编辑为包含\b

p str.split(/(?=\b\d{4}\b)/)
# => ["September ", "1997, such and such"]

答案 1 :(得分:0)

使用正向前瞻,您可以拆分空字符串,然后是小数点(\d)。在这种情况下,这意味着空字符串必须后跟小数,但小数不会是拆分的一部分。

"September 1997, such and such".split(/(?=\d)/)
#=> ["September ", "1997, such and such"]

如果您需要精确匹配四位小数,可以使用量词({n}),例如

"September 1997, such and such".split(/(?=\d{4})/)
#=> ["September ", "1997, such and such"]

如果你想摆脱两者之间的空间,你可以另外捕获一个或多个空白字符(\s+)而不是空字符串:

"September 1997, such and such".split(/\s+(?=\d)/)
#=> ["September", "1997, such and such"]

答案 2 :(得分:0)

像这样拆分September 1997, such and such

(?<=\d{4}),\s*

应该得到这个输出

September 1997
such and such 

你甚至可以添加额外的空格

(?<=\d{4})\s*,\s*

可变性和修剪。