Reputation: 441
I have a string:
Apple iPhone 6 (Space Grey, 32 GB), Apple iPhone 6 (Space Grey, 32 GB)
I want to spilt the string with delimiter = ',' but want to escape the ones in bracket. I have used as below :
s= "Apple iPhone 6 (Space Grey, 32 GB), Apple iPhone 6 (Space Grey, 32 GB)"
s.split(",")
which gives the output:
['Apple iPhone 6 (Space Grey','32 GB)','Apple iPhone 6 (Space Grey','32 GB)']
but I want output as below
['Apple iPhone 6 (Space Grey, 32 GB)','Apple iPhone 6 (Space Grey, 32 GB)']
Upvotes: 2
Views: 82
Reputation: 147
Well, one more... easier than my previous one, I hope
s = "Apple iPhone 6 (Space Grey, 32 GB), Apple iPhone 6 (Space Grey, 32 GB)"
parts = s.split(")")[:-1]
result = []
for part in parts:
result.append(part.replace(",", "").strip() + ")")
print(result)
Upvotes: 0
Reputation: 7625
Maybe, it is an over kill, but if you want to use built-in functions, you can do it this way:
>>> s = 'Apple iPhone 6 (Space Grey, 32 GB), Apple iPhone 6 (Space Grey, 32 GB)'
>>> splitted_s = s.split(',')
>>> [','.join([a, b]).strip() for a, b in list(zip(splitted_s, splitted_s[1:]))[::2]]
['Apple iPhone 6 (Space Grey, 32 GB)', 'Apple iPhone 6 (Space Grey, 32 GB)']
Upvotes: 1
Reputation: 7214
Try this:
s.replace("), ", ")|").split('|')
# ['Apple iPhone 6 (Space Grey, 32 GB)', 'Apple iPhone 6 (Space Grey, 32 GB)']
Upvotes: 2
Reputation: 12017
An easy way to do this is to reject for )
after ,
:
import re
s= "Apple iPhone 6 (Space Grey, 32 GB), Apple iPhone 6 (Space Grey, 32 GB)"
re.split(",(?![^(]*?\))\s*", s)
Upvotes: 2