Freddie wrote:
Happy new year! Since I have run out of alcohol, I'll ask a question that I haven't really worked out an answer for yet. Is there an elegant way to turn something like:
> moo cow "farmer john" -zug
into:
['moo', 'cow', 'farmer john'], ['zug']
I'm trying to parse a search string so I can use it for SQL WHERE constraints, preferably without horrifying regular expressions. Uhh yeah.
The shlex approach, finished:
searchstring = 'moo cow "farmer john" -zug' lexer = shlex.shlex(searchstring) lexer.wordchars += '-' poslist, neglist = [], [] while 1: token = lexer.get_token() # token is '' on eof if not token: break # remove quotes if token[0] in '"\'': token = token[1:-1] # select in which list to put it if token[0] == '-': neglist.append(token[1:]) else: poslist.append(token)
regards, Reinhold
Thanks for this, though there was one issue:
>>> lexer = shlex.shlex('moo cow +"farmer john" -dog') >>> lexer.wordchars += '-+' >>> while 1: ... tok = lexer.get_token() ... if not tok: break ... print tok ... moo cow +"farmer john" -dog
The '+"farmer john"' part would be turned into two seperate words, '+"farmer' and 'john"'. I ended up using shlex.split() (which the docs say is new in Python 2.3), which gives me the desired result. Thanks for the help from yourself and M.E.Farmer :)
Freddie
>>> shlex.split('moo cow +"farmer john" -"evil dog"') ['moo', 'cow', '+farmer john', '-evil dog'] >>> shlex.split('moo cow +"farmer john" -"evil dog" +elephant') ['moo', 'cow', '+farmer john', '-evil dog', '+elephant']
-- http://mail.python.org/mailman/listinfo/python-list