2017-07-24 2 views
0

Gibt es eine bessere Möglichkeit, eine Zeichenfolge zu teilen, die entflohenen Delimeter darin enthält.Split-String mit entkommenen Delimeter mit einem Delimeter

string = "fir\&st_part&secon\&d_part" 
print(string.split('&')) 
# is giving me 
>>> ['fir\\', 'st_part', 'secon\\', 'd_part'] 
# but not 
>>> ['fir&st_part', 'secon&d_part'] 

Ich habe ein Escape-Zeichen \ vor & in fir&st_part und secon&d_part mit der Absicht hinzugefügt, die Funktion geteilt wird das folgende Zeichen entkommen.

Gibt es einen besseren Weg, dies zu tun, wenn Sie nicht einen String Split verwenden?

Antwort

1

können Sie Benutzer regulären Ausdruck!

Split wenn ?<! aktuelle Position der Zeichenkette nicht mit nach hinten (\, zwei Schrägstrichen es zu entkommen) vorgeschaltet ist Schrägstrich und Ampersand Symbol (&)

>>> import re 
>>> re.split(r'(?<!\\)&', string) 
['fir\\&st_part', 'secon\\&d_part'] 

Mit der Ergebnisliste können Sie durchlaufen und ersetzen Sie die Escaped '\ &' mit '&' wenn nötig!

>>> import re 
>>> print [each.replace("\&","&") for each in re.split(r'(?<!\\)&', string)] 
['fir&st_part', 'secon&d_part'] 
0

Es ist möglich, einen regulären Ausdruck:

import re 
string = "fir\&st_part&secon\&d_part" 
re.split(r'[^\\]&', string) 
# ['fir\\&st_par', 'secon\\&d_part'] 
Verwandte Themen