[Tutor] str.split and quotes

Brian van den Broek bvande at po-box.mcgill.ca
Wed Apr 6 08:45:30 CEST 2005


Tony Meyer said unto the world upon 2005-04-06 01:59:
>>>>>s = 'Hi "Python Tutors" please help'
>>>>>s.split()
>>
>>['Hi', '"Python', 'Tutors"', 'please', 'help']
>>
>>I wish it would leave the stuff in quotes in tact:
>>
>>['Hi', '"Python Tutors"', 'please', 'help']
> 
> 
> You can do this with a regular expression:
> 
>

<SNIP re solution>

> Or you can just join them back up again:
> 
> 
>>>>combined = []
>>>>b = []
>>>>for a in s.split():
> 
> ... 	if '"' in a:
> ... 		if combined:
> ... 			combined.append(a)
> ... 			b.append(" ".join(combined))
> ... 			combined = []
> ... 		else:
> ... 			combined.append(a)
> ... 	else:
> ... 		b.append(a)
> ... 		
> 
>>>>b
> 
> ['Hi', '"Python Tutors"', 'please', 'help']
> 
> (There are probably tidier ways of doing that).

That won't work for the general case. I spent about 30 minutes trying 
to come up with a reliably non-re way and kept hitting bugs like the 
one here. Given that Tony_combine is a function wrapping Tony's logic:

 >>> Tony_combine('This will not work as "more than two words" are 
quoted')
['This', 'will', 'not', 'work', 'as', 'than', 'two', '"more words"', 
'are', 'quoted']

Happily, the other solution Tony offered works for my case and thus 
saves me the hassle of fixing my attempt :-)

> Or you can do the split yourself:
> 
> def split_no_quotes(s):
<SNIP code which works for my test case>


Best to all,

Brian vdB



More information about the Tutor mailing list