Guest User

Untitled

a guest
Mar 21st, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. def split_brackets(text, brackets_open_character='(', brackets_close_character=')', depth=0):
  2. items = []
  3.  
  4. word = ''
  5. counter = 0
  6. start = -1
  7.  
  8. for index, character in enumerate(text):
  9. if character == brackets_open_character:
  10. if counter == 0:
  11.  
  12. if word:
  13. items.append(word)
  14. word = ''
  15.  
  16. start = index + 1
  17.  
  18. counter += 1
  19.  
  20. elif character == brackets_close_character:
  21. counter -= 1
  22.  
  23. if counter == 0:
  24. items.append(split_brackets(text[start:index], brackets_open_character=brackets_open_character, brackets_close_character=brackets_close_character, depth=depth + 1))
  25.  
  26. else:
  27. if counter == 0:
  28. word += character
  29.  
  30. if word:
  31. items.append(word)
  32.  
  33. return items
  34.  
  35.  
  36. def join_brackets(items, brackets_open_character='(', brackets_close_character=')', depth=0):
  37. parts = []
  38. for item in items:
  39.  
  40. if isinstance(item, list):
  41. item = join_brackets(item, brackets_open_character=brackets_open_character, brackets_close_character=brackets_close_character, depth=depth + 1)
  42. item = '{brackets_open_character}{item}{brackets_close_character}'.format(item=item, brackets_close_character=brackets_close_character, brackets_open_character=brackets_open_character)
  43.  
  44. parts.append(item)
  45.  
  46. return ''.join(parts)
  47.  
  48.  
  49. def main():
  50. text = '(1) and (b and (asd )) and (c)'
  51. splitted = split_brackets(text)
  52. assert (join_brackets(splitted) == text)
  53.  
  54.  
  55. if __name__ == '__main__':
  56. main()
Add Comment
Please, Sign In to add comment