次のような文字列があるとします。
May 12 -
私が行きたいところは次のとおりです。
May 12
gsub(/\s+\W/, '')
末尾のスペースと最後のハイフンを取り除くために機能する and を実行してみました。
しかし、 . の前の最初のスペースを削除する方法がわかりませんM
。
考え?
match
正規表現を使用して代わりに使用gsub
します(つまり、無関係な部分を取り除こうとする代わりに、関連する文字列を抽出します) /\w+(?:\W+\w+)*/
。
" May 12 - ".match(/\w+(?:\W+\w+)*/).to_s # => "May 12"
これは使用するよりもはるかに効率的であることに注意してくださいgsub
– 私のmatch
正規表現を提案されたgsub
regexと比較すると、これらのベンチマークが得られます (500 万回の繰り返しで):
user system total real
match: 19.520000 0.060000 19.580000 ( 22.046307)
gsub: 31.830000 0.120000 31.950000 ( 35.781152)
提案されgstrip!
ているようにステップを追加しても、これは大きく変わりません。
user system total real
match: 19.390000 0.060000 19.450000 ( 20.537461)
gsub.strip!: 30.800000 0.110000 30.910000 ( 34.140044)
使用.strip! あなたの結果に。
" May 12".strip! # => "May 12"
どうですか:
/^\s+|\s+\W+$/
説明:
/ : regex delim
^ : begining of string
\s+ : 1 or more spaces
| : OR
\s+\W+ : 1 or more spaces followed by 1 or more non word char
$ : end of string
/ : regex delim