Что не так с моей попыткой выполнить операцию замены строки в Python? - PullRequest
2 голосов
/ 24 апреля 2009

Что я здесь не так делаю?

import re
x = "The sky is red"
r = re.compile ("red")
y = r.sub(x, "blue")
print x  # Prints "The sky is red"
print y  # Prints "blue"

Как мне заставить его напечатать "Небо голубое"?

Ответы [ 5 ]

12 голосов
/ 24 апреля 2009

Проблема с вашим кодом в том, что в модуле re есть две подфункции. Один является общим, а другой связан с объектами регулярных выражений. Ваш код не соответствует ни одному из них:

Два метода:

re.sub(pattern, repl, string[, count]) (документы здесь)

Используется так:

>>> y = re.sub(r, 'blue', x)
>>> y
'The sky is blue'

И для того, чтобы, когда вы пытались его скомпилировать, как вы пытались, вы можете использовать:

RegexObject.sub(repl, string[, count=0]) (документы здесь)

Используется так:

>>> z = r.sub('blue', x)
>>> z
'The sky is blue'
6 голосов
/ 24 апреля 2009

Вы неправильно прочитали API

http://docs.python.org/library/re.html#re.sub

pattern.sub (repl, string [, count]) ¶

r.sub(x, "blue")
# should be
r.sub("blue", x)
3 голосов
/ 26 апреля 2009

Кстати, для такого простого примера модуль re является избыточным:

x= "The sky is red"
y= x.replace("red", "blue")
print y
3 голосов
/ 24 апреля 2009

У вас есть аргументы для вашего вызова sub неправильный путь должен быть:


import re
x = "The sky is red"
r = re.compile ("red")
y = r.sub("blue", x)
print x  # Prints "The sky is red"
print y  # Prints "The sky is blue"

1 голос
/ 24 апреля 2009

Попробуйте:

x = r.sub("blue", x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...