Ошибка замены urllib и регулярного выражения - PullRequest
1 голос
/ 04 декабря 2011

Почему следующее приводит к ошибке?

import re
from urllib import quote as q
s = re.compile(r'[^a-zA-Z0-9.: ^*$@!+_?-]')
s.sub(q, "A/B")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/python/python-2.7.1/lib/python2.7/urllib.py", line 1236, in quote
    if not s.rstrip(safe):
AttributeError: rstrip

Я бы хотел вызывать sub для строк, содержащих косую черту, но не уверен, почему это приводит к этой ошибке. Как это можно исправить, чтобы я мог передавать строки с символами '/' в них в sub ()?

спасибо.

1 Ответ

2 голосов
/ 04 декабря 2011

Поскольку re.sub вызывает параметр repl с экземпляром re.match.

Я думаю, что вы хотите использовать:

s.sub(lambda m: q(m.group()), "A/B")

Однако, более простой способ сделать это - использовать аргумент safe для urllib.quote:

urllib.quote("A/B", safe="/.: ^*$@!+_?-")
...