Kullanımdan Kaldırma Uyarı: geçersiz kaçış dizisi - \ d yerine ne kullanılmalı?


113

rePython 3.6.5'teki modülde bir sorunla karşılaştım . Normal ifademde şu kalıp var:

'\\nRevision: (\d+)\\n'

Ama çalıştırdığımda, bir alıyorum DeprecationWarning.

Sorunu SO'da aradım ve cevabı bulamadım, aslında - yerine ne kullanmalıyım \d+? Sadece [0-9]+veya belki başka bir şey?


2
Sorun olmamalı, daha fazla kod mu verilsin?
2018

3
Çift kaçış mı \dyoksa kullanım r'\\nRevision: (\d+)\\n'mı?
revo

Yanıtlar:


186

Python 3, dize değişmezlerini Unicode dizeleri olarak yorumlar ve bu nedenle sizin \d, öncelenmiş bir Unicode karakteri olarak değerlendirilir.

RegEx modelinizi r, aşağıdaki gibi başa ekleyerek bunun yerine ham bir dize olarak bildirin :

r'\nRevision: (\d+)\n'

Bu aynı zamanda kaçışları da bırakabileceğiniz anlamına gelir \nçünkü bunlar sadece satırsonu karakterleri olarak ayrıştırılır re.


9
Biraz daha kesin olmak gerekirse, \dtanınmayan bir kaçış dizisi olarak ele alınır ve bu nedenle değişmeden bırakılır. Python 3.6'dan beri bir Kullanımdan Kaldırma Uyarısı verilmektedir. Python'un gelecekteki bazı sürümlerinde bu bir SyntaxError olacaktır. Dokümanlar'daki "2.4.1. Dize ve Bayt değişmez değerleri" ile ilgili ayrıntılar.
VPfB

@VPfB iş parçacığı eski, ama aynı soruna cevap arıyordum. \ D, çıkış yapılmış bir Unicode karakteri olarak değerlendirilirse, normal ifade desenini ham dizge olarak ele almadan d (alfabetik karakter) ile \ d (herhangi bir rakam) arasındaki farkı nasıl ayırt edebilirim? (Aynı soru \ w, \ W vb ... için de geçerlidir)
giulia_dnt

2
@theggg Sorunuzu doğru anlarsam - ters eğik çizgiden kaçının, böylece dize okur '\\d'.
ACascarino
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.