2011-06-23 13 views
7

Jak zastąpić "z \" w ciągu Pythona?Python - unikanie podwójnych cudzysłowów za pomocą string.replace

Mam ciąg z podwójnym cudzysłowie:

s = 'a string with "double" quotes' 

Chcę uciec cudzysłowów z jednej backslash.

wykonując następujące czynności nie dość pracy, ucieka z dwóch ukośników:

s.replace('"', '\\"') 
'a string with \\"double\\" quotes' 

Drukowanie wyjście tego łańcucha pokazuje, co chcę. Ale nie chcę drukować prawidłowego ciągu, chcę go zapisać w zmiennej. Czy ktoś może mi pomóc z prawidłowym magicznym wyrażeniem regularnym?

Odpowiedz

8

Łańcuch ma poprawną wartość. Ale repr użyje odwrotnego ukośnika-uciecze się, aby pokazać niedrukowalne znaki, i dla spójności (ma tworzyć literał w języku Python, który, gdy jest oceniany, zwraca ten sam ciąg, który był wejściem do repr) również ucieka każdego odwrotnego ukośnika, który występuje w strunowy.

Należy zauważyć, że jest to raczej ograniczony algorytm ucieczki. W zależności od tego, czego potrzebujesz, może być konieczne znaczne rozszerzenie (lub gotowe rozwiązanie, np. Wyciągi z termostatu podczas pracy z bazami danych).

8

Twoja pierwotna próba działa dobrze. Podwójne ukośniki odwrotne, które widzisz, są po prostu sposobem wyświetlania pojedynczych ukośników odwrotnych, które znajdują się w łańcuchu. Zobacz także: __repr__()

>>> s = 'a string with "double" quotes' 
>>> ss = s.replace('"', '\\"') 
>>> len(s) 
29 
>>> len(ss) 
31 
0

jeden backslash nie widać, ale odwrotny ukośnik pozostaje w ciąg. Jeśli sprawdzisz długość tego samego napisu, zobaczysz odpowiedź. Ponadto, jeśli zastąpisz nowy ciąg ponownie cudzysłowem, otrzymasz oryginalny ciąg znaków.

Powiązane problemy