regex help partial code

J

Junkone

Hello
I have with great effort started on teh regex implemention and am
stuck at one point.
here is my code
(add)\s+\S+\s+[i|s|f]\s+[pei]?\s+

The string is as follows and the tokens are equavalent to
1 token=Add
2 token=any text
3. token=one of the following i or s or f
4.token= 0 or 1 of the following characters [p e i]

I am stuck at the 4th token. i thought ? after the token will give
the 0 or 1 option.
pl correct me if i made a error

seede
 
J

Junkone

Hello
I have with great effort started on teh regex implemention and am
stuck at one point.
here is my code
(add)\s+\S+\s+[i|s|f]\s+[pei]?\s+

The string is as follows and the tokens are equavalent to
1 token=Add
2 token=any text
3. token=one of the following i or s or f
4.token= 0 or 1 of the following characters [p e i]

I am stuck at the 4th token.  i thought ? after the token will give
the 0 or 1 option.
pl correct me if i made a error

seede

irb(main):046:0> a=Regexp.new('(add)\s+(\S+)\s+([i|s|f])\s+([pei])?\s
+',true)
=> /(add)\s+(\S+)\s+([i|s|f])\s+([pei])?\s+/i
irb(main):047:0> a =~("Add comp i pe")
=> nil

I dont get match at 4th token
 
Y

yermej

Hello
I have with great effort started on teh regex implemention and am
stuck at one point.
here is my code
(add)\s+\S+\s+[i|s|f]\s+[pei]?\s+
The string is as follows and the tokens are equavalent to
1 token=Add
2 token=any text
3. token=one of the following i or s or f
4.token= 0 or 1 of the following characters [p e i]
I am stuck at the 4th token. i thought ? after the token will give
the 0 or 1 option.
pl correct me if i made a error

irb(main):046:0> a=Regexp.new('(add)\s+(\S+)\s+([i|s|f])\s+([pei])?\s
+',true)
=> /(add)\s+(\S+)\s+([i|s|f])\s+([pei])?\s+/i
irb(main):047:0> a =~("Add comp i pe")
=> nil

I dont get match at 4th token

There are a few problems here, I think.
Regexp.new('(add)\s+(\S+)\s+([i|s|f])\s+([pei])?\s+',true)

As written, the second token can't have whitespace. Is that what you
intended?

You want ([isf]) for your third token. That will match a single
instance of one of the three characters.

Also, I'm not clear on what you want for the fourth token. Do you want
0 or 1 of [pei] or 0 or 1 of *each* of [pei] - which of these are
valid for the fourth token: e or pe.

You should also end the regex with \s* unless there's always going to
be whitespace. You're currently checking for one or more whitespace
characters at the end, but your test didn't have any.

Assuming you do allow 0 or 1 of each of [pei] for the fourth token and
0 or more whitespace characters at the end, I would use:

r = /(add)\s+(\S+)\s+([isf])\s+(p?e?i?)\s*/i

Though, if there can't be whitespace in any of the tokens, you might
want to use split rather than a regex. The regex above can only get
the fourth token right if the letters are in order - p will match, ei
will match, ip will not. Split wouldn't have that problem. There may
be a regex way around that, but I can't think of it at the moment.

"Add comp i ep".scan r # => [["Add", "comp", "i", "e"]]
"Add comp i ep".split # => ["Add", "comp", "i", "ep"]
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

Can't solve problems! please Help 0
Help with code 0
Need help with this Python code. 2
Regex help 6
Help in fixing this code 8
Need help with this script 4
Python battle game help 2
Convert AWK regex to Python 6

Members online

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,020
Latest member
GenesisGai

Latest Threads

Top