# Strip doesn't take a character set?

**URL:** <https://www.ruby-forum.com/t/strip-doesnt-take-a-character-set/169804>\
**Category:** Ruby\
**Created:** [June 8, 2009, 11:58pm UTC](https://www.ruby-forum.com/t/strip-doesnt-take-a-character-set/169804 "2009-06-08T23:58:29Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Xeno\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/958977/32.png) [@Xeno\_C](https://www.ruby-forum.com/u/Xeno_C)\
**Post date:** [June 8, 2009, 11:58pm UTC](https://www.ruby-forum.com/t/strip-doesnt-take-a-character-set/169804/1 "2009-06-08T23:58:29Z")

</div>

I wanna do something like newstr = str.strip(/\D/)

I know I could do newstr = str.sub(/^\D\*/,’’).sub(/\D\*$/,’’), but is  
there any  
better way?

xc

---

<div class="post-metadata">

**Author:** ![Xeno\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/958977/32.png) [@Xeno\_C](https://www.ruby-forum.com/u/Xeno_C)\
**Post date:** [June 9, 2009, 12:08am UTC](https://www.ruby-forum.com/t/strip-doesnt-take-a-character-set/169804/2 "2009-06-09T00:08:26Z")

</div>

On Jun 8, 5:57 pm, Xeno C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> I wanna do something like newstr = str.strip(/\D/)
> 
> I know I could do newstr = str.sub(/^\D\*/,‘’).sub(/\D\*$/,‘’), but is there any  
> better way?

Maybe

str.sub(/^\D\*(._)\D_$/, ‘\1’)

T.

---

<div class="post-metadata">

**Author:** ![Xeno\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/958977/32.png) [@Xeno\_C](https://www.ruby-forum.com/u/Xeno_C)\
**Post date:** [June 9, 2009, 12:09am UTC](https://www.ruby-forum.com/t/strip-doesnt-take-a-character-set/169804/3 "2009-06-09T00:09:36Z")

</div>

> I wanna do something like newstr = str.strip(/\D/)
> 
> I know I could do newstr = str.sub(/^\D\*/,’’).sub(/\D\*$/,’’), but is there  
> any  
> better way?

Use #slice / #[]:

irb(main):006:0\> s = “aaa111bbb222ccc”  
=\> “aaa111bbb222ccc”  
irb(main):007:0\> s[/\A\D\*(._)\D_\z/, 1]  
=\> “111bbb222ccc”

---

<div class="post-metadata">

**Author:** ![Xeno\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/958977/32.png) [@Xeno\_C](https://www.ruby-forum.com/u/Xeno_C)\
**Post date:** [June 9, 2009, 12:10am UTC](https://www.ruby-forum.com/t/strip-doesnt-take-a-character-set/169804/4 "2009-06-09T00:10:47Z")

</div>

On 08.06.2009 23:57, Xeno C. wrote:

> I wanna do something like newstr = str.strip(/\D/)
> 
> I know I could do newstr = str.sub(/^\D\*/,’’).sub(/\D\*$/,’’), but is there any  
> better way?

Maybe

newstr = str.sub /\A\D\*(._?)\D_\z/, ‘\1’  
newstr = str[/\A\D\*(._?)\D_\z/, 1]

Kind regards

robert

---

<div class="post-metadata">

**Author:** ![Xeno\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/958977/32.png) [@Xeno\_C](https://www.ruby-forum.com/u/Xeno_C)\
**Post date:** [June 9, 2009, 2:12am UTC](https://www.ruby-forum.com/t/strip-doesnt-take-a-character-set/169804/5 "2009-06-09T02:12:58Z")

</div>

Robert K. wrote:

> On 08.06.2009 23:57, Xeno C. wrote:
> 
> > I wanna do something like newstr = str.strip(/\D/)
> > 
> > I know I could do newstr = str.sub(/^\D\*/,’’).sub(/\D\*$/,’’), but is  
> > there any better way?
> 
> Maybe
> 
> newstr = str.sub /\A\D\*(._?)\D_\z/, ‘\1’  
> newstr = str[/\A\D\*(._?)\D_\z/, 1]

And a final tweak to account for \n:  
newstr = str.sub /\A\D\*(._?)\D_\z/m, ‘\1’  
newstr = str[/\A\D\*(._?)\D_\z/m, 1]

---

<div class="post-metadata">

**Author:** ![Xeno\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/x/958977/32.png) [@Xeno\_C](https://www.ruby-forum.com/u/Xeno_C)\
**Post date:** [June 9, 2009, 12:16am UTC](https://www.ruby-forum.com/t/strip-doesnt-take-a-character-set/169804/6 "2009-06-09T00:16:03Z")

</div>

> =\> “aaa111bbb222ccc”  
> irb(main):007:0\> s[/\A\D\*(._)\D_\z/, 1]  
> =\> “111bbb222ccc”

Oops, gotta be non-greedy:

irb(main):001:0\> s = “aaa111bbb222ccc”  
=\> “aaa111bbb222ccc”  
irb(main):002:0\> s[/\A\D\*(._?)\D_\z/, 1]  
=\> “111bbb222”
