2014-02-26 25 views
1

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 
+1

我不確定要得到想要的輸出......你能解釋清楚嗎?對我來說,你只是寫了'1997年9月這樣和那樣'兩次:/ – Robin

+0

請提供你的案件更清晰。你是否總是想在一年之前和逗號之間恰好分割一行?這有什麼關係嗎?作爲一個方面說明,當你已經有一個字符串時,調用to_s是沒有必要的。 – Coenwulf

+0

'1997年9月諸如此類'逗號之間發生了什麼,它爲什麼神奇地消失? – sln

回答

0

拆分September 1997, such and such這樣

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

應該得到這個輸出

September 1997 
such and such 

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

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

可變性和修整。

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"> 

這並做多個Split(編輯成包括\b感謝p11y)

p str.split(/(?=\b\d{4}\b)/) 
# => ["September ", "1997, such and such"] 
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"]