Regular Expression Help

Hi, new to the forum, not new to Ruby but very new to Regular Expression
and they are killing me…

I have strings that look like this:
“— this is a string —” = “— this is a string —”;
" this is a string " = " this is a string ";
“###this is a string” = “###this is a string”;

I need to just get both string on each side to the equal sign, not
including the equal sign. I need to get all spaces or characters inside
the quotes but not including the quotes and not the semi-colon. I need
to compare the two strings. So…

this is a string this is a string

I tried using string.scan/regex/ which I like because it returns an
array. Again Fail.

I’ve tried all kinds of RegEx…I simply don’t know what I’m doing and I
very frustrated. I have been using http://rubular.com/ to experiment but
I’m really not having success…

My most successful attempt, [^"=;] gets pretty much what I need but I
can’t not select the space around the =.

I’ve looked at documentation, used Rubular and have tried a lot of
different things.

Can someone please help me?

Thanks

Brad

Am 06.10.2012 01:11, schrieb Brad Askins:

the quotes but not including the quotes and not the semi-colon. I need

My most successful attempt, [^"=;] gets pretty much what I need but I
can’t not select the space around the =.

1.9.3-p194 :001 > text = ‘"— this is a string —" = “— this is a
string —”;’
=> “”— this is a string —" = “— this is a string —”;"
1.9.3-p194 :002 > text.scan(/"(.?)" = "(.?)"/).flatten
=> ["— this is a string —", “— this is a string —”]

On Sat, Oct 6, 2012 at 1:21 AM, [email protected] wrote:

1.9.3-p194 :001 > text = ‘"— this is a string —" = “— this is a string
—”;’
=> “”— this is a string —" = “— this is a string —”;"
1.9.3-p194 :002 > text.scan(/"(.?)" = "(.?)"/).flatten
=> ["— this is a string —", “— this is a string —”]

I’d rather use an approach which explicitly includes the “=” sign, for
example

irb(main):026:0> text = ‘"— this is a string —" = “— this is a
string —”;’
=> “”— this is a string —" = “— this is a string —”;"
irb(main):027:0> if %r{"([^"])"\s=\s*"([^"]*)"} =~ text then p $1, $2
end
“— this is a string —”
“— this is a string —”
=> ["— this is a string —", “— this is a string —”]

If one wants to allow escaped quotes inside the string things get a
bit more tricky but that’s doable as well:

irb(main):028:0> text = ‘"— this is an escaped quote: “” = “—
this is a string —”;’
=> “”— this is an escaped quote: \"" = “— this is a string
—”;"
irb(main):029:0> if %r{"((?:\.|[^"\]))"\s=\s*"((?:\.|[^"\])*)"}
=~ text then p $1, $2 end
“— this is an escaped quote: \”"
“— this is a string —”
=> ["— this is an escaped quote: \"", “— this is a string —”]

Of course, you could also include the trailing “;” in the match to be
even more restrictive.

irb(main):030:0> if
%r{"((?:\.|[^"\]))"\s=\s*"((?:\.|[^"\]))"\s;} =~ text then p
$1, $2 end
“— this is an escaped quote: \”"
“— this is a string —”
=> ["— this is an escaped quote: \"", “— this is a string —”]

Kind regards

robert

Am 06.10.2012 12:12, schrieb Robert K.:

On Sat, Oct 6, 2012 at 1:21 AM, [email protected] wrote:

1.9.3-p194 :001 > text = ‘"— this is a string —" = “— this is a string
—”;’
=> “”— this is a string —" = “— this is a string —”;"
1.9.3-p194 :002 > text.scan(/"(.?)" = "(.?)"/).flatten
=> ["— this is a string —", “— this is a string —”]

I’d rather use an approach which explicitly includes the “=” sign

???

It does.

text.scan(/"(.?)" = "(.?)"/).flatten

That worked awesome!!

So I was getting pretty close. I see what I was doing wrong now that I
see the solution.

That’s for your help.

I need more practice on RegEx.

Thanks again.

Brad

On Sat, Oct 6, 2012 at 12:25 PM, [email protected] wrote:

I’d rather use an approach which explicitly includes the “=” sign

???

It does.

Right you are. I let myself irritate by your usage of String#scan.
Sorry for that.

I do not think this is a case for #scan though since according to the
OP’s description the String only contains one “assignment”. So it’s
either “match” or “don’t match”.

Kind regards

robert

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs