我正在使用Rails 5.如何從我的字符串開頭刪除第一個字符不是字母(即!〜/ \ p {L} /)的所有單詞?所以,如果我有一個字符串如何根據條件修剪Rails字符串?
"1000 22 cc33 dfdsf"
我希望得到的結果是
"cc33 dfdsf"
同樣,如果在字符串
"7nnn 2000 388 a 4000 bbb"
我希望的結果是
"a 4000 bbb"
我正在使用Rails 5.如何從我的字符串開頭刪除第一個字符不是字母(即!〜/ \ p {L} /)的所有單詞?所以,如果我有一個字符串如何根據條件修剪Rails字符串?
"1000 22 cc33 dfdsf"
我希望得到的結果是
"cc33 dfdsf"
同樣,如果在字符串
"7nnn 2000 388 a 4000 bbb"
我希望的結果是
"a 4000 bbb"
我想「單詞」只是非空白符號的塊。
您可以使用
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
詳細:
\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。
該模式會一直搜索,直到找到第一個出現「單詞」的標準,然後它將所有內容都帶到字符串的末尾。您可以從匹配的組中提取結果。
.*?\b([A-Za-z].*)
交換它:
.*?\b([A-Za-z][\s\S]*)
如果需要行終止包括在內。
是的,你對我關於單詞的鬆散定義是正確的 - 「非空白符號塊」。 – Dave
當然可以。你的答案總是準確的,並有非常詳細的解釋。 – Dave