2012-05-14 15 views
6

ho la seguente stringaPython come sostituire backslash con re.sub()

mystr1 = 'mydirname' 
myfile = 'mydirname\myfilename' 

Sto cercando di fare questo

newstr = re.sub(mystr1 + "\","",myfile) 

Come faccio a fuggire il backslash che sto cercando concatenare a mystr1?

+4

Sono consapevole che questo non risponde in alcun modo alla tua domanda, ma se possibile non andarci nemmeno; usa 'os.path.join' e altre funzioni' os.path' per manipolare i percorsi in modo indipendente dal sistema. – Amadan

+0

@Amadan, grazie per voi rispondere, ma io non sto cercando di manipolare i percorsi, sto solo cercando di prendere il contenuto di un file specifico (per questo, sto usando os.path) e poi sto Minimizzando le dati e posizionandolo come JS var in base al nome file originale. Sto solo manipolando la stringa del nome file (che include il percorso completo) per la variabile JS. – user838437

+0

Ho solo pensato che quello che stai facendo è quasi lo stesso di os.path.basename (myfile) '. Colpa mia. – Amadan

risposta

16

Hai bisogno di un backslash quadrupla:

newstr = re.sub(mystr1 + "\\\\", "", myfile) 

Motivo:

  • Regex per abbinare una singola barra rovesciata: \\
  • String per descrivere questo regex: "\\\\".

In alternativa è possibile utilizzare una stringa di prima, in modo che solo bisogno di una doppia barra rovesciata: r"\\"

+0

Questo funziona, grazie. Accetterò la risposta una volta che posso. – user838437

+0

Not In My Python 3.2 (R32: 88445, 20 Febbraio 2011, 21:29:02) [MSC v.1500 32 bit (Intel)] su win32: '>>> subject = "è th \ è: un percorso ? "; re.sub ("[/ \\\:? \"]", "_", soggetto) 'è th_is_ un path_'' –

+0

Ma ho appena notato che va solo per fughe sconosciuti come "\:." –

0

In un'espressione regolare, si può sfuggire un backslash come qualsiasi altro personaggio mettendo un backslash davanti ad esso . Ciò significa che "\\" è un singolo backslash.

+0

Sì, ma abbiamo a che fare con le stringhe qui che contengono * * un'espressione regolare applicano le regole doppie fuga –

+0

TEOUltimus:.. la tua risposta è per lo più corretta ., il problema era solo un po 'più in profondità io upvote esso in modo da è a 0, invece di -1 un pezzo di feedback per la prossima volta: il commento 'il motivo per cui io odio python' è qualcosa che non è apprezzato su StackOverflow. StackOverflow è per risposte solide, non per fanghiglia di fango. –

+0

e anche se si potrebbe pensare che r "\" ti darebbe lo stesso di "\\", poiché r "\\" è "\\\\", tu " d sii sbagliato ... non puoi avere un singolo \: P – mpag

Problemi correlati