Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # escape_splitter.py
- # Callum Howard, 2019
- escapes = {r'\a', r'\b', r'\f', r'\n', r'\r', r'\t', r'\v', r'\\', r"\'", r'\"', r'\?'}
- def split_on_escape(input, prefix=''):
- digraphs = [''.join(pair) for pair in zip(input, input[1:])]
- for i, digraph in enumerate(digraphs):
- if digraph in escapes:
- return [prefix + input[:i]] + split_on_escape(input[i+2:], prefix=digraph)
- return [prefix + input]
- def split_on_escape1(input):
- result = []
- prefix = ''
- skip = 0
- digraphs = [''.join(pair) for pair in zip(input, input[1:])]
- for i, digraph in enumerate(digraphs):
- if skip > 0:
- skip -= 1
- continue
- if digraph not in escapes:
- prefix += input[i]
- else:
- result.append(prefix)
- prefix = digraph
- skip = 1
- if skip == 0:
- prefix += input[-1]
- result.append(prefix)
- return result
- # tests
- f = split_on_escape1
- print(f(r'Hello\nworld'))
- assert(f(r'Hello\nworld') == ['Hello', r'\nworld'])
- print(f(r'\nHello world'))
- assert(f(r'\nHello world') == ['', r'\nHello world'])
- print(f(r'Hello world\n'))
- assert(f(r'Hello world\n') == [r'Hello world', r'\n'])
- print(f(r'Hell\o\nworld'))
- assert(f(r'Hell\o\nworld') == [r'Hell\o', r'\nworld'])
- print(f(r'Hello\\nworld'))
- assert(f(r'Hello\\nworld') == ['Hello', r'\\nworld'])
- print(f(r'Hello\nworld\nfoo\nbar\nbaz'))
- assert(f(r'Hello\nworld\nfoo\nbar\nbaz') ==
- ['Hello', r'\nworld', r'\nfoo', r'\nbar', r'\nbaz'])
Add Comment
Please, Sign In to add comment