# Regexp grouping question

**URL:** <https://www.ruby-forum.com/t/regexp-grouping-question/93406>\
**Category:** Ruby\
**Created:** [April 1, 2006, 11:10pm UTC](https://www.ruby-forum.com/t/regexp-grouping-question/93406 "2006-04-01T23:10:26Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [April 1, 2006, 11:10pm UTC](https://www.ruby-forum.com/t/regexp-grouping-question/93406/1 "2006-04-01T23:10:26Z")

</div>

Hi

I’m trying to remove unecessary white space around equals signs and  
after semicolons

compressed = “foo = bar; red = herring;”  
compressed = compressed.gsub(/\s\*([=;])\s\*/,"#$1")  
puts compressed

produces  
foobarredherring

but I would like it to produce  
foo=bar;red=herring;

Seems like the #$1 is not working. I also tried #{$1} but that didn’t  
work either.

Any ideas?

Thanks,  
Peter

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [April 1, 2006, 11:16pm UTC](https://www.ruby-forum.com/t/regexp-grouping-question/93406/2 "2006-04-01T23:16:32Z")

</div>

compressed = “foo = bar; red = herring;”  
compressed = compressed.gsub(/\s\*([=;])\s\*/,’\1’)

I believe #$1 is evalued _before_ gsub is executed and hence fails.  
gsub sets the variable and uses \1, \2, \3 in the replacement string  
to correspond.

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [April 1, 2006, 11:31pm UTC](https://www.ruby-forum.com/t/regexp-grouping-question/93406/3 "2006-04-01T23:31:48Z")

</div>

Chris A. wrote:

> compressed = “foo = bar; red = herring;”  
> compressed = compressed.gsub(/\s\*([=;])\s\*/,’\1’)
> 
> I believe #$1 is evalued _before_ gsub is executed and hence fails.  
> gsub sets the variable and uses \1, \2, \3 in the replacement string  
> to correspond.

Thank you!

Peter

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [April 2, 2006, 12:29am UTC](https://www.ruby-forum.com/t/regexp-grouping-question/93406/4 "2006-04-02T00:29:47Z")

</div>

On Apr 1, 2006, at 4:28 PM, removed\_email\_address@domain.invalid wrote:

> Peter

If you want to use $1, $2, $3, etc. with gsub, you can use the block  
form:

compressed.gsub(regexp) { |matched\_string| $1 }

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [June 22, 2007, 11:33pm UTC](https://www.ruby-forum.com/t/regexp-grouping-question/93406/5 "2007-06-22T23:33:25Z")

</div>

unknown wrote:

> Hi
> 
> I’m trying to remove unecessary white space around equals signs and  
> after semicolons
> 
> compressed = “foo = bar; red = herring;”  
> compressed = compressed.gsub(/\s\*([=;])\s\*/,"#$1")  
> puts compressed
> 
> produces  
> foobarredherring
> 
> but I would like it to produce  
> foo=bar;red=herring;
> 
> Seems like the #$1 is not working. I also tried #{$1} but that didn’t  
> work either.
> 
> Any ideas?
> 
> Thanks,  
> Peter

This thread has been _very helpful_. Thank you!

What if the input syntax allows spaces in the field values?

Possible input:  
foo = high bar jump ; red = pickled herring ;

And, let’s remove leading and trailing white space.

Desired results:  
foo=high bar jump;red=pickled herring;
