Проблема выражения в регулярном выражении, удаляющая ': /' - PullRequest
0 голосов
/ 17 апреля 2019

Из строки мне нужно удалить все, кроме буквы, числа, пробела или '-'.

Я использую:

regex = re.compile('^[,?!`@#$%^&*()+=.:/]+')
name = regex.sub('', my_text)

Но если у меня есть текст:

lorem ipsum: 100 gb/s and beyond

Мое выражение регулярного выражения из приведенного выше примера не удаляет ':', '/'

Ответы [ 2 ]

3 голосов
/ 17 апреля 2019

Вам необходимо удалить ^ (начало строки). На боковой ноте знак + не обязателен

regex = re.compile('[,?!`@#$%^&*()+=.:/]')
name = regex.sub('', my_text)

Демо: https://regex101.com/r/DjTvwL/1

Я перечитал ваше описаниеи так как вы не хотите «все, кроме букв, цифр и пробелов», ваше текущее регулярное выражение не подходит: оно позволяет [_ »и так далее ... так что вам лучше использовать отрицательное регулярное выражение:

import re
my_regex = re.compile('([^0-9A-Za-z\-\s])') # 0- 9 => digits; A-z => letter; \- the '-' char; \s any whitespace
my_text = 'lorem ipsum: 100 gb/s and beyond'

name = my_regex.sub('', my_text)

print(name)
1 голос
/ 17 апреля 2019

Вместо того, чтобы пытаться захватить все возможные символы, дингбаты и любые другие символы, которые вы хотите удалить, я бы порекомендовал реализовать буквально все, что не является буквой, цифрой, пробелом или '-':

regex = re.compile('[^a-zA-Z0-9 -]')
name = regex.sub('', my_text)

Вы можете использовать классы персонажей в своем классе персонажей.Если у вас все в порядке с подчеркиванием в виде буквы, и вы хотите поддерживать буквы Юникода, следующее более кратко:

 regex = re.compile('[^\w -]')

Проблема с вашим исходным выражением состоит в том, что ^ вне класса символов соответствуетначало строки.Ваше выражение может удалять только те символы, которые вы указали в начале строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...