Regexp help needed


#1

Hey All,

I need to parse lines that look like this:

1 'Not qualified' 2 'Overquota' 3 'Qualified'/ 1 'SSI' 2 'Mall Facility'/ 1 'Real Interview' 2 'Practice Interview'/

So I’ve got N sets of <><><> on
each line. I want to grab each of the digits & labels, but I’m having
trouble w/the repetition stuff. Below is a simple script that doesn’t
work–it grabs the first set, but seems to ignore the rest.

str = “1 ‘Not qualified’ 2 ‘Overquota’ 3 ‘Qualified’”
rgx = /((\d+)\s+(’[^’]+?’))+/i
m = rgx.match(str)
unless m.nil?
m.captures.each {|c| puts©}
end

Can anybody throw me a regex clue here?

Thanks!

  • Roy

#2

Hey Roy,
On Sat, Apr 28, 2007 at 06:50:10AM +0900, removed_email_address@domain.invalid wrote:

So I’ve got N sets of <><><> on

Can anybody throw me a regex clue here?

You might want to try the scan method:

str = “1 ‘Not qualified’ 2 ‘Overquota’ 3 ‘Qualified’”

str.scan(/(\d+)\s+(’[^’]+’)+/).each do |match|
p match
end

Hope that helps!


#3

Perhaps a little something like this:

str = “1 ‘Not qualified’ 2 ‘Overquota’ 3 ‘Qualified’”
rgx = /((\d+)\s+(’[^’]+?’))+/i
m = str.scan(rgx)
m.each do |match|
puts match.first
end

Duane J.
(canadaduane)


#4

On 4/27/07, removed_email_address@domain.invalid removed_email_address@domain.invalid wrote:

So I’ve got N sets of <><><> on

r = %r/(\d+)\s+(’[^’]*’)/
s = “1 ‘Not qualified’ 2 ‘Overquota’ 3 ‘Qualified’”

s.scan® #=> [[“1”, “‘Not qualified’”], [“2”,
“‘Overquota’”], [“3”, “‘Qualified’”]]

Blessings,
TwP


#5

Ah–that’s the magic! Thanks guys!

-Roy