Soubhik Banerjee
Soubhik Banerjee

Reputation: 441

Using Split in Python while escaping delimiter in brackets

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

Answers (4)

Kalma
Kalma

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

Jaroslav Bezděk
Jaroslav Bezděk

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

oppressionslayer
oppressionslayer

Reputation: 7214

Try this:

s.replace("), ", ")|").split('|')                                                                                                                                                   
# ['Apple iPhone 6 (Space Grey, 32 GB)', 'Apple iPhone 6 (Space Grey, 32 GB)']

Upvotes: 2

Anonymous
Anonymous

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

Related Questions