Как удалить ненужный символ из строки в python не используя replace - используя регулярное выражение
Вот задание: Создайте функцию, которая дает строку, сохраняет только буквы A-Z (верхний и нижний регистр), 0-9 цифр и символы пробелов.Кроме того, возвращает "не строку!"Если тип записи не является строкой. Я создал такую функцию - она прошла все тесты
Вот тестовые строки
'\x0c3U\x0c P \' /j<c\t M+# ~ \x0bh ^m ?g?-\t#-t +m"0\x0cjvk Ez'
'><#qY= / YbxSltf? GIi(+dl\r .?%E4\r?2\r D'
'r%Q 0 \x0cIYpK IssqER%. ;<*/\x0c9l bC8\'[:\x0b|Z EX!R{" BWP(xTn [B >'
import re
def nothing_special(st):
if not isinstance(st, str):
return "Not a string!"
pattern = r'[A-Za-z0-9 /\n/\t/\r/\x0b/\x0c]'
st = st.replace('/', '')
match = re.findall(pattern, re.escape(st))
if match:
res = ''.join(match)
return res
return ''
Не получается из созданного регулярного выражения УБИРАТЬ "слеш"
Пришлось применить st = st.replace('/', '') Подскажите как это сделать в регулярном выражении! И можно ли за раз в регулярке убрать такие символы как:
/ просто "слеш"
/\n/\t/\r/\x0b/\x0c - без экранирования
перенос строки
вертикаль. табуляцию
каретку
нечитаемые символы
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Здесь лучше использовать re.sub() и удалить (заменить на пустую строку) символы, не являющиеся A-Z (верхний и нижний регистр), 0-9 цифр и символы пробелов.
import re
def nothing_special(st):
if not isinstance(st, str):
return "Not a string!"
return re.sub(r'[^A-Za-z\d ]', '', st)
for test in '\x0c3U\x0c P \' /j<c\t M+# ~ \x0bh ^m ?g?-\t#-t +m"0\x0cjvk Ez', '><#qY= / YbxSltf? GIi(+dl\r .?%E4\r?2\r D', 'r%Q 0 \x0cIYpK IssqER%. ;<*/\x0c9l bC8\'[:\x0b|Z EX!R{" BWP(xTn [B >', 10:
print(f'Исходная: {repr(test)}, после обработки: {nothing_special(test)}')
Исходная: '\x0c3U\x0c P \' /j<c\t M+# ~ \x0bh ^m ?g?-\t#-t +m"0\x0cjvk Ez', после обработки: 3U P jc M h m gt m0jvk Ez
Исходная: '><#qY= / YbxSltf? GIi(+dl\r .?%E4\r?2\r D', после обработки: qY YbxSltf GIidl E42 D
Исходная: 'r%Q 0 \x0cIYpK IssqER%. ;<*/\x0c9l bC8\'[:\x0b|Z EX!R{" BWP(xTn [B >', после обработки: rQ 0 IYpK IssqER 9l bC8Z EXR BWPxTn B
Исходная: 10, после обработки: Not a string!