2013-07-22 90 views
0

我在這個簡單的正則表達式中遇到了最糟糕的時間。拆分字母和數字之間的空格

例輸入:

Cleveland Indians 5, Boston Redsox 4 

我想在,和字母和數字之間的空間分割

輸出示例:

Cleveland Indians 
5 
Boston Redsox 
4 

這裏是我有什麼到目前爲止,但它仍然包括數字。

/,|\s[0-9]/ 
+1

如何在'分裂,然後'空間?最後的元素將是數字,第一個X將是團隊的名稱。這個或從空間的最後一個索引開始工作。 –

回答

4
string = "Cleveland Indians 5, Boston Redsox 4" 
string.split /,\s*|\s(?=\d)/ 
# => ["Cleveland Indians", "5", "Boston Redsox", "4"] 

\s(?=\d):一個空間,隨後使用lookahead一個數字。

+1

你是一個紳士和學者。你能解釋正則表達式的第二部分嗎? – Franklin

+0

@Franklin對不起,我編輯了我的答案。 – oldergod

1

如果您將它分成兩個分組 - 一個在逗號+空格處,然後一個將分組名稱與分數分開 - 可能會更清晰一些,尤其是如果您必須添加更多選項逗號太(真實世界的數據變得混亂!):

scores = "Cleveland Indians 5, Boston Redsox 4" 
scores.split(/,\s*/).map{|score| score.split(/\s+(?=\d)/)} 
=> [["Cleveland Indians", "5"], ["Boston Redsox", "4"]] 

得到的名單列表是一個更有意義的分組了。

0
"Cleveland Indians 5, Boston Redsox 4".split(/\s*(\d+)(?:,\s+|\z)/) 
# => ["Cleveland Indians", "5", "Boston Redsox", "4"] 
0

1)

str = "Cleveland Indians 15, Boston Red Sox 4" 
phrases = str.split(", ") 

phrases.each do |phrase| 
    *team_names, score = phrase.split(" ") 
    puts team_names.join " " 
    puts score 
end 


--output:-- 
Cleveland Indians 
15 
Boston Red Sox 
4 

2)

str = "Cleveland Indians 15, Boston Red Sox 4" 

pieces = str.split(/ 
    \s*  #A space 0 or more times 
    (\d+)  #A digit 1 or more times, include match with results 
    [,\s]* #A comma or space, 0 or more times 
/x)   

puts pieces 



--output:-- 
Cleveland Indians 
15 
Boston Red Sox 
4 

第一分割的是「15」,並且第二分割是「4」 - 與包含在結果中的分數。

3)

str = "Cleveland Indians 15, Boston Red Sox 4" 

str.scan(/ 
    (
     \w  #Begin with a word character 
     \D+  #followed by not a digit, 1 or more times 
    ) 
    [ ]  #followed by a space 
    (\d+)  #followed by a digit, one or more times 
/x) {|capture_groups| puts capture_groups} 


--output:-- 
Cleveland Indians 
15 
Boston Red Sox 
4 
相關問題