[go: up one dir, main page]

Menu

[d66369]: / src / parsers / util.py  Maximize  Restore  History

Download this file

54 lines (37 with data), 1.6 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# -*- coding: utf-8 -*-
'''
Created on 27.11.2010
Содержит различные вспомогательные функции пакета parsers.
'''
import re
from helpers import is_none_or_empty
def escape(string):
#Сначала escap-им слеши
string = re.sub(r'\\', r'\\\\', string)
#Только потом все остальные символы!
string = re.sub(r'"', r'\"', string)
return string
def unescape(string):
string = re.sub(r'\\"', r'"', string)
string = re.sub(r'\\\\', r'\\', string)
return string
def quote(string):
'''Заключает string в кавычки и escape-ит символы внутри этой строки.'''
return '"' + escape(string) + '"'
def unquote(string):
'''Убрать кавычки (если есть) и раскрыть все escape последовательности. '''
if not is_none_or_empty(string) and string.startswith('"') \
and string.endswith('"') and not string.endswith(r'\"'):
string = string[1:-1]
return unescape(string)
if __name__ == "__main__":
unescaped = r'This string should be \properly\ "escaped"!'
print(unescaped)
print(escape(unescaped))
escaped = r'Is this \\string\\ un-\"escaped\"?'
print(escaped)
print(unescape(escaped))
#А если сделать так, то будет уже каша - два раза применятся escape-последовательности
print(escape(escaped))
m = re.findall(r'"', unescaped)
print(m)