2017-08-07 45 views
1

我正在使用Rails 5.如何從我的字符串開頭刪除第一個字符不是字母(即!〜/ \ p {L} /)的所有單詞?所以,如果我有一個字符串如何根據條件修剪Rails字符串?

"1000 22 cc33 dfdsf" 

我希望得到的結果是

"cc33 dfdsf" 

同樣,如果在字符串

"7nnn 2000 388 a 4000 bbb" 

我希望的結果是

"a 4000 bbb" 

回答

2

我想「單詞」只是非空白符號的塊。

您可以使用

rx = /\G[^[:space:]\p{L}][^[:space:]]*[[:space:]]*/ 

puts "1000 22 cc33 dfdsf".gsub(rx, '')    # => cc33 dfdsf 
puts "7nnn 2000 388 a 4000 bbb".gsub(rx, '') # => a 4000 bbb 

Ruby demo online

詳細

  • \G - 字符串或者以前的匹配(因此年底開始,我們只得到連續匹配從字符串的開頭)
  • [^[:space:]\p{L}] - 一個char不是一個空白,而不是一個字母
  • [^[:space:]]* - 0+非空格
  • [[:space:]]* - 0+空格。

你可以使用的另一個正則表達式是/\A(?:[^[:space:]\p{L}][^[:space:]]*[[:space:]]*)+/。這裏,\A匹配字符串的開頭,並且(?:...)+與上述模式的連續出現次數相同。

注意:如果你想匹配專門的字母數字的話,那就是,如果你想刪除開始在字符串的開頭數字所有的話,你可以使用

/\G\p{N}[[:alnum:]]*[^[:alnum:]]*/ 

/\A(?:\p{N}[[:alnum:]]*[^[:alnum:]]*)+/ 

其中\p{N}任何數字,[[:alnum:]]匹配任何字母數字和[^[:alnum:]]匹配任何字符不是字母數字相匹配。見another Ruby demo

+1

是的,你對我關於單詞的鬆散定義是正確的 - 「非空白符號塊」。 – Dave

+1

當然可以。你的答案總是準確的,並有非常詳細的解釋。 – Dave

0

該模式會一直搜索,直到找到第一個出現「單詞」的標準,然後它將所有內容都帶到字符串的末尾。您可以從匹配的組中提取結果。

.*?\b([A-Za-z].*) 

交換它:

.*?\b([A-Za-z][\s\S]*) 

如果需要行終止包括在內。