lucas
November 26, 2009, 10:31pm
1
Hello everyone.
I’m trying to match the following pattern:
Text1\n
Text2\n
Text3—
Please note that Text3 can contain \n.
I tried using this regex:
/(.?)\n(. ?)\n(.*?)—/
The pattern matches and I have three matches, but they’re like this:
match[0] => “Text2\nText3—”
macth[1] => ‘Text2’
match[2] => ‘Text3’
How can I get the first one to be ‘Text1’ ?
lucas
November 26, 2009, 10:52pm
2
try putting word metacharacter instead of an any metacharacter
\w*
instead of
.*
2009/11/26 Lucas F. [email protected]
lucas
November 26, 2009, 10:56pm
3
s = “Text1\n
Text2\n
Text3—”
irb(main):036:0> s.scan( /(\w+?)(?:\n|-+)/ )
=> [[“Text1”], [“Text2”], [“Text3”]]
Usually, it’s easier to use scan when you feel your code in the Regexp
gonna
be repeated.
If the text is so simple, you could iterate which String#each_line, and
then
remove any ‘-’ at the end.
2009/11/26 Lucas F. [email protected]
lucas
November 27, 2009, 8:18am
4
On 11/27/2009 02:37 AM, Lucas F. wrote:
[Note: parts of this message were removed to make it a legal post.]
thanks guys. I did not know about string scan!
If you know there are always three groups you can also do:
irb(main):006:0> s=“t1
irb(main):007:0” t2
irb(main):008:0" t3—"
=> “t1\nt2\nt3—”
irb(main):009:0> /([^\n]+)\n([^\n]+)\n([^\n]+)—/ =~ s
=> 0
irb(main):010:0> $1
=> “t1”
irb(main):011:0> $2
=> “t2”
irb(main):012:0> $3
=> “t3”
Cheers
robert
lucas
November 27, 2009, 2:38am
5
thanks guys. I did not know about string scan!
2009/11/26 Benoit D. [email protected]