У меня есть следующее регулярное выражение, которое, я думаю, должно соответствовать любому символу, который не является буквенно-цифровым, '!', '?' или '.'
re.compile('[^A-z ?!.]')
Однако в iPython я получаю следующий странный результат:
In [21]: re.sub(a, ' ', 'Hey !$%^&*.#$%^&.')
Out[21]: 'Hey ! ^ . ^ .'
Результат тот же, когда я убираю '.' в регулярном выражении.
Как я могу сопоставить карету, чтобы она также удалялась из строки?
У вас есть ошибка в вашем регулярном выражении. Обратите внимание на то, что важны случаи a
и z
. A-z
включает все символы между значениями ASCII 65 (A) и 122 (Z), которые включают символ каретки (код ASCII 94).
Попробуйте это вместо:
re.compile('[^A-Za-z ?!.]')
Пример:
import re
regex = re.compile('[^A-Za-z ?!.]')
result = regex.sub(' ', 'Hey !$%^&*.#$%^&.')
print result
Результат:
Hey ! . .
Каретка находится между верхним и нижним случаями в ASCII. Вам нужно [^a-zA-Z ?!\.]