2016-04-10 3 views
1

Я пытаюсь заменить любой символ, который не является: (буква, '.', '_', '-') строкой символов, однако re. sub всегда заменяет всю строку вместо одного символа.Замена одного символа подстрокой в ​​python 3

xmlreplace=re.compile("((?i)[^\w\_\-\.])", re.UNICODE) 
print(xmlreplace.sub("regex test","-")) 

ожидается выход: "регулярное выражение-тест"

фактический выход: "-"

+0

сколько замены вы хотите? У него есть дополнительный параметр 'count', который можно использовать для ограничения числа замещений – rock321987

+0

@ rock321987 Я бы хотел, чтобы он заменил все вхождения нежелательных символов –

+2

Шаблоны регулярных выражений должны использовать необработанные строки' r "..." '. – interjay

ответ

0

Аргументы неупорядочены. Он должен быть

print(xmlreplace.sub("-" , "regex test")) 

Ideone Demo

Если вы хотите, вы можете использовать re.sub().

re.sub(pattern, repl, string, count=0) 

тогда, это должно быть

xmlreplace=re.compile("((?i)[^\w\_\-\.])", re.UNICODE) 
print(re.sub(xmlreplace, "-" , "regex test")) 
1

Аргументы навыворот.

>>> help(xmlreplace.sub) 
Help on built-in function sub: 

sub(...) 
    sub(repl, string[, count = 0]) --> newstring 
    Return the string obtained by replacing the leftmost non-overlapping 
    occurrences of pattern in string by the replacement repl. 
>>> print(xmlreplace.sub("-", "regex test")) 
regex-test 
Смежные вопросы