1

Pythonでは、次のような文字列から空白、改行、またはランダムな文字を取り除くことができます

>>> '/asdf/asdf'.strip('/')
'asdf/asdf' # Removes / from start
>>> '/asdf/asdf'.strip('/f')
'asdf/asd' # Removes / from start and f from end
>>> ' /asdf/asdf '.strip()
'/asdf/asdf' # Removes white space from start and end
>>> '/asdf/asdf'.strip('/as')
'df/asdf' # Removes /as from start
>>> '/asdf/asdf'.strip('/af')
'sdf/asd' # Removes /a from start and f from end

しかし、Ruby のString#stripメソッドは引数を受け付けません。私はいつでも正規表現を使用するようにフォールバックできますが、Ruby で正規表現を使用せずに文字列 (後ろと前) からランダムな文字を削除する方法/方法はありますか?

4

2 に答える 2

6

正規表現を使用できます。

"atestabctestcb".gsub(/(^[abc]*)|([abc]*$)/, '')
# => "testabctest"

もちろん、これをメソッドにすることもできます。

def strip_arbitrary(s, chars)
    r = chars.chars.map { |c| Regexp.quote(c) }.join
    s.gsub(/(^[#{r}]*)|([#{r}]*$)/, '')
end

strip_arbitrary("foobar", "fra") # => "oob"
于 2012-09-04T11:46:19.187 に答える
3

Python のストリップは少し変わっています。引数のいずれかに一致する文字をいずれかの端から削除します。

2 が必要だと思います.subs。最初から剥がすものと最後から剥がすもの

irb(main):001:0> 'asdf/asdf'.sub(/^[\/]*/, '').sub(/[\/]*$/, '')
=> "asdf/asdf"
irb(main):002:0> 'asdf/asdf'.sub(/^[\/f]*/, '').sub(/[\/f]*$/, '')
=> "asdf/asd"
irb(main):003:0> ' asdf/asdf'.sub(/^[ ]*/, '').sub(/[ ]*$/, '')
=> "asdf/asdf"
于 2012-09-04T11:45:45.343 に答える