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
答案 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*
可变性和修剪。