2014-11-04 17 views
0

我有一個很長的字符串,大約有2000個字符。該字符串是一個連接段,每個段的前兩個字符作爲段指示符。子字符串以數字組合開頭,直到下一個空格

EG- '11xxxxx 12yyyy 14ddddd gghgfbddc 0876686589 SANDRA柯林斯201 STMONK CA'

現在我想提取與指示符的段14

我實現這一點使用:

str.split(' ').each do |substr| 

    if substr.starts_with?('14') 

    key = substr.slice(2,5).to_i 

    break 

    end 

end 

我覺得應該有更好的方法來做到這一點。我無法爲ruby中的字符串匹配找到更直接和單行的解決方案。請有人提出一個更好的方法。

回答

1

這並不完全清楚你要找什麼,因爲你的示例字符串顯示字母,但你的標題說數字。無論如何,這對於正則表達式來說是一個很好的任務。

foo = '12yyyy 014dddd 14ddddd gghgfbddc' 
bar = '12yyyy 014dddd 1499999 gghgfbddc' 
baz = '12yyyy 014dddd 14a9B9z gghgfbddc' 

foo[/\b14[a-zA-Z]+/] # => "14ddddd" 
bar[/\b14\d+/] # => "1499999" 
baz[/\b14\w+/] # => "14a9B9z" 

foo[/\b14\S+/] # => "14ddddd" 
bar[/\b14\S+/] # => "1499999" 
baz[/\b14\S+/] # => "14a9B9z" 

在圖案:

  • \b意味着字斷,所以該圖案具有在空格或標點符號之間的轉變開始。
  • [a-zA-Z]+表示一個或多個字母。
  • \d+表示一個或多個數字。
  • \w+表示一個或多個字母,數字和'_'。這相當於字符集[a-zA-Z0-9_]+
  • \S+表示非空白,如果您希望一切都到達空間,這非常有用。

哪些適合您的用例是真的由您來決定。

+0

非常感謝。它完美的作品。 – user3445140 2014-11-05 11:29:03

相關問題