Skip to content

Instantly share code, notes, and snippets.

@jossef
Created March 12, 2018 15:39
Show Gist options
  • Select an option

  • Save jossef/58fd21be6934abac1e5f998338a53cb4 to your computer and use it in GitHub Desktop.

Select an option

Save jossef/58fd21be6934abac1e5f998338a53cb4 to your computer and use it in GitHub Desktop.
python brackets / parenthesis split join to list
def split_brackets(text, brackets_open_character='(', brackets_close_character=')', depth=0):
items = []
word = ''
counter = 0
start = -1
for index, character in enumerate(text):
if character == brackets_open_character:
if counter == 0:
if word:
items.append(word)
word = ''
start = index + 1
counter += 1
elif character == brackets_close_character:
counter -= 1
if counter == 0:
items.append(split_brackets(text[start:index], brackets_open_character=brackets_open_character, brackets_close_character=brackets_close_character, depth=depth + 1))
else:
if counter == 0:
word += character
if word:
items.append(word)
return items
def join_brackets(items, brackets_open_character='(', brackets_close_character=')', depth=0):
parts = []
for item in items:
if isinstance(item, list):
item = join_brackets(item, brackets_open_character=brackets_open_character, brackets_close_character=brackets_close_character, depth=depth + 1)
item = '{brackets_open_character}{item}{brackets_close_character}'.format(item=item, brackets_close_character=brackets_close_character, brackets_open_character=brackets_open_character)
parts.append(item)
return ''.join(parts)
def main():
text = '(1) and (b and (asd )) and (c)'
splitted = split_brackets(text)
assert (join_brackets(splitted) == text)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment