Проблемы с соответствием каретки в регулярном выражении Python

1

У меня есть следующее регулярное выражение, которое, я думаю, должно соответствовать любому символу, который не является буквенно-цифровым, '!', '?' или '.'

re.compile('[^A-z ?!.]')

Однако в iPython я получаю следующий странный результат:

In [21]: re.sub(a, ' ', 'Hey !$%^&*.#$%^&.')
Out[21]: 'Hey !  ^  .   ^ .'

Результат тот же, когда я убираю '.' в регулярном выражении.

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

  • 0
    Вы говорите «буквенно-цифровой», но ваше регулярное выражение (несмотря на его недостатки) ищет только буквы. Убедитесь, что это то, что вы хотите.
  • 0
    Вы правы - моя ошибка: когда я сказал «алфавитно-цифровой», я действительно имел в виду буквы AZ ,.
Теги:

2 ответа

3
Лучший ответ

У вас есть ошибка в вашем регулярном выражении. Обратите внимание на то, что важны случаи 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 !     .     .
0

Каретка находится между верхним и нижним случаями в ASCII. Вам нужно [^a-zA-Z ?!\.]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню