2016-07-07 2 views
0

Je suis en cours d'exécution d'un snippest comme ça:sur le module re en python

p = re.compile(b'^((?!-)[*A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$') 
m = p.match(domain) 

'domaine' sont les adresses IP sont de google dns. Je sais qu'il ya quelque chose de mal avec le décodage, donc j'ai essayé de coder les expressions régulières après avoir été compilé, mais toujours obtenir l'avis de bug comme celui-ci,

Traceback (most recent call last): 
File "D:\python34\lib\threading.py", line 921, in _bootstrap_inner 
self.run() 
File "update.py", line 101, in run 
    if validate_domain(domain): 
File "update.py", line 182, in validate_domain 
    m = pattern.match(domain) 
TypeError: can't use a bytes pattern on a string-like object 

Pourriez-vous me donner quelques conseils pour cette situation

!!! langage de programmation: python 3.4

+2

se débarrasser de la 'b' – Sayse

+0

Premier lien sur Google pour le message d'erreur donné est un [double] (http: // stackoverflow .com/q/5184483/1324033) – Sayse

+0

Une raison pour laquelle vous utilisez 'b''' au lieu de' r ''? – robert

Répondre

1

un b au Adjonction début de votre modèle en fait un objet octets. Mais vous ne pouvez pas faire correspondre des objets chaîne avec un modèle d'octets. L'erreur est tout à fait clair:

p = re.compile(b'^((?!-)[*A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$') 
#   ^

Vous avez probablement l'intention d'utiliser r''

+1

pourquoi était-ce downvoted? J'aurais dit la même chose. – patrick