Reg exp

Hi every body. I’m a newbie in Ruby and have problem with reg exp.

In one string as example “The device 13c include something as in Fig. 2a
and 3b”, I want to detect some numbers have style “13c” and ignore
others number have style “2a and 3b”

I use /(\d+[a-z])( [^a][^n][^d] )(\d)+[a-z]/ but it not ok. Can
someone help me plz?

It would be helpful if you would share several examples of patterns that
you
want to match and patterns that you want to exclude. Also,
http://www.rubular.com is a great place for experimenting with regular
expressions in Ruby.

Regards,
Craig

Hai anh Le wrote:

Hi every body. I’m a newbie in Ruby and have problem with reg exp.

In one string as example “The device 13c include something as in Fig. 2a
and 3b”, I want to detect some numbers have style “13c” and ignore
others number have style “2a and 3b”

I use /(\d+[a-z])( [^a][^n][^d] )(\d)+[a-z]/ but it not ok. Can
someone help me plz?

Tricky. I suggest:

str.scan(/\d+[a-z]?(?: and \d+[a-z]?)?/).reject { |e| /and/ =~ e }

I thought about lookahead assertions, e.g. (?! and \d+), but since these
don’t consume characters the 3b is likely to be matched later as a
standalone number.

Details at Programming Ruby: The Pragmatic Programmer's Guide - click on “The
Ruby Language” in the contents, and scroll down to Extensions.

Brian C. wrote:

Hai anh Le wrote:

Hi every body. I’m a newbie in Ruby and have problem with reg exp.

In one string as example “The device 13c include something as in Fig. 2a
and 3b”, I want to detect some numbers have style “13c” and ignore
others number have style “2a and 3b”

I use /(\d+[a-z])( [^a][^n][^d] )(\d)+[a-z]/ but it not ok. Can
someone help me plz?

Tricky. I suggest:

str.scan(/\d+[a-z]?(?: and \d+[a-z]?)?/).reject { |e| /and/ =~ e }

I thought about lookahead assertions, e.g. (?! and \d+), but since these
don’t consume characters the 3b is likely to be matched later as a
standalone number.

Details at Programming Ruby: The Pragmatic Programmer's Guide - click on “The
Ruby Language” in the contents, and scroll down to Extensions.

Hi Brian!

I have another example as:

“The coefficients are then mixed with the data from mixer 51xy, so that
the recording equipment 14abc stores the six channel data stream, the
scripting data 26aa and 27ac”

My purpose is to find the position of number have style “123abc”, after
that I get the string from begin to that position like “The coefficients
are then mixed with the data from mixer 51xy,”
Then I will continued search…

My code like

while string.size do
if string=~ /…/ then
temp_string = $` + $&
string.gsub!(temp_string, “”)
else
break
end

So that what I need is $& = “123abc” and not = “123abc and 123abc”

Hai anh Le wrote:

I have another example as:

“The coefficients are then mixed with the data from mixer 51xy, so that
the recording equipment 14abc stores the six channel data stream, the
scripting data 26aa and 27ac”

My purpose is to find the position of number have style “123abc”, after
that I get the string from begin to that position like “The coefficients
are then mixed with the data from mixer 51xy,”
Then I will continued search…

My code like

while string.size do
if string=~ /…/ then
temp_string = $` + $&
string.gsub!(temp_string, “”)
else
break
end

So that what I need is $& = “123abc” and not = “123abc and 123abc”

Sorry - that still does not make it clear what you want, especially with
the portion of the string " … the scripting data 26aa and 27ac"

Here is some code:

str = <<EOS
The coefficients are then mixed with the data from mixer 51xy, so that
the recording equipment 14abc stores the six channel data stream, the
scripting data 26aa and 27ac
EOS

p str.scan(/.?\d+[a-z]/m)

[“The coefficients are then mixed with the data from mixer 51xy”, ",

so that \nthe recording equipment 14abc", " stores the six channel data
stream, the \nscripting data 26aa", " and 27ac"]

If you want to keep 26aa but not 27ac, then use reject to strip out the
match " and 27ac".

Here is another option:

p str.scan(/.?\d+[a-z](?: and \d+[a-z]*)?/m)

[“The coefficients are then mixed with the data from mixer 51xy”, ",

so that \nthe recording equipment 14abc", " stores the six channel data
stream, the \nscripting data 26aa and 27ac"]

This time the whole clause up to an including 26aa and 27ac is a
separate item, and you can strip this out using reject.

p str.scan(/.?\d+[a-z](?: and \d+[a-z]*)?/m)

[“The coefficients are then mixed with the data from mixer 51xy”, ",

so that the recording equipment 14abc", " stores the six channel data
stream, the scripting data 26aa and 27ac"]

yes, it is all thing I want. Thank you very much