Guest User

Untitled

a guest
Jan 20th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.48 KB | None | 0 0
  1. # escape_splitter.py
  2. # Callum Howard, 2019
  3.  
  4. escapes = {r'\a', r'\b', r'\f', r'\n', r'\r', r'\t', r'\v', r'\\', r"\'", r'\"', r'\?'}
  5.  
  6. def split_on_escape(input, prefix=''):
  7. digraphs = [''.join(pair) for pair in zip(input, input[1:])]
  8. for i, digraph in enumerate(digraphs):
  9. if digraph in escapes:
  10. return [prefix + input[:i]] + split_on_escape(input[i+2:], prefix=digraph)
  11. return [prefix + input]
  12.  
  13. def split_on_escape1(input):
  14. result = []
  15. prefix = ''
  16. skip = 0
  17.  
  18. digraphs = [''.join(pair) for pair in zip(input, input[1:])]
  19. for i, digraph in enumerate(digraphs):
  20. if skip > 0:
  21. skip -= 1
  22. continue
  23.  
  24. if digraph not in escapes:
  25. prefix += input[i]
  26. else:
  27. result.append(prefix)
  28. prefix = digraph
  29. skip = 1
  30.  
  31. if skip == 0:
  32. prefix += input[-1]
  33. result.append(prefix)
  34.  
  35. return result
  36.  
  37. # tests
  38. f = split_on_escape1
  39.  
  40. print(f(r'Hello\nworld'))
  41. assert(f(r'Hello\nworld') == ['Hello', r'\nworld'])
  42.  
  43. print(f(r'\nHello world'))
  44. assert(f(r'\nHello world') == ['', r'\nHello world'])
  45.  
  46. print(f(r'Hello world\n'))
  47. assert(f(r'Hello world\n') == [r'Hello world', r'\n'])
  48.  
  49. print(f(r'Hell\o\nworld'))
  50. assert(f(r'Hell\o\nworld') == [r'Hell\o', r'\nworld'])
  51.  
  52. print(f(r'Hello\\nworld'))
  53. assert(f(r'Hello\\nworld') == ['Hello', r'\\nworld'])
  54.  
  55. print(f(r'Hello\nworld\nfoo\nbar\nbaz'))
  56. assert(f(r'Hello\nworld\nfoo\nbar\nbaz') ==
  57. ['Hello', r'\nworld', r'\nfoo', r'\nbar', r'\nbaz'])
Add Comment
Please, Sign In to add comment