Удалить цифры в Python (Regex)
Я пытаюсь удалить все цифры из строки. Однако следующий код удаляет также цифры, содержащиеся в любом слове, и, очевидно, я этого не хочу. Я пробовал много регулярных выражений без успеха.
Благодаря!
s = "This must not b3 delet3d, but the number at the end yes 134411" s = re.sub("\d+", "", s) print s
Результат:
Это не должно быть b deleted, но номер в конце да
- Вырезать номера из строки
- Как использовать ? и?: и: в REGEX для Python?
- Как найти положительное или отрицательное значение внутри строки?
- python regexp для нескольких тысяч слов
- Как использовать rstrip для удаления завершающих символов?
Добавьте пробел перед \ d +.
>>> s = "This must not b3 delet3d, but the number at the end yes 134411" >>> s = re.sub(" \d+", " ", s) >>> s 'This must not b3 delet3d, but the number at the end yes '
Изменить: просмотрев комментарии, я решил составить более полный ответ. Я думаю, что это объясняет все случаи.
s = re.sub("^\d+\s|\s\d+\s|\s\d+$", " ", s)
Попробуй это:
"\b\d+\b"
Это будет соответствовать только тем цифрам, которые не являются частью другого слова.
Использование \s
не очень хорошо, поскольку оно не обрабатывает вкладки и т. Д. Первый разрез в лучшем решении:
re.sub(r"\b\d+\b", "", s)
Обратите внимание, что шаблон является исходной строкой, потому что \b
обычно является escape-пространством для строк, и мы хотим вместо этого использовать специальное выражение регулярного выражения. Немного более благоприятная версия:
re.sub(r"$\d+\W+|\b\d+\b|\W+\d+$", "", s)
Это пытается удалить ведущие / конечные пробелы, когда есть цифры в начале / конце строки. Я говорю «пытается», потому что, если в конце есть несколько номеров, у вас все еще есть пробелы.
Если ваш номер всегда в конце ваших строк, попробуйте: re.sub ("\ d + $", "", s)
в противном случае вы можете попробовать re.sub ("(\ s) \ d + (\ s)", "\ 1 \ 2", s)
Вы можете отрегулировать обратные ссылки, чтобы сохранить только одно или два пробела (\ s соответствует любому белым разделителям)
Для обработки строк цифр в начале строки также:
s = re.sub(r"(^|\W)\d+", "", s)
Нерегрессионное решение:
>>> s = "This must not b3 delet3d, but the number at the end yes 134411" >>> " ".join([x for x in s.split(" ") if not x.isdigit()]) 'This must not b3 delet3d, but the number at the end yes'
Разбивается на " "
и проверяет, является ли кусок числом, выполнив str().isdigit()
, затем объединяет их вместе. Более подробно (не используя понимание списка):
words = s.split(" ") non_digits = [] for word in words: if not word.isdigit(): non_digits.append(word) " ".join(non_digits)
Я не знаю, как выглядит ваша реальная ситуация, но большинство ответов выглядят так, что они не будут обрабатывать отрицательные числа или десятичные числа,
re.sub(r"(\b|\s+\-?|^\-?)(\d+|\d*\.\d+)\b","")
Вышеупомянутое должно также обрабатывать такие вещи, как,
«Это не должно быть b3 delete3d, но номер в конце да -134.411"
Но это все еще не завершено – вам, вероятно, нужно более полное определение того, что вы можете ожидать найти в файлах, которые вам нужно проанализировать.
Изменить: также стоит отметить, что «\ b» изменяется в зависимости от набора локалей / символов, который вы используете, поэтому вам нужно быть осторожным с этим.
- Начало программы Python
- Использование Django auth Модель пользователя в качестве внешнего ключа и обратных отношений
- Алгоритм для сопоставления натурального текста по почте
- Почему отрицательный Lookahead истекает с помощью And / or Pipe
- строка python re find, которая может содержать скобки
- В чем смысл «(? I) password» в регулярном выражении python?
- Разделить текст на разделы с помощью python regex
- Печать подпроцесса при повторном захвате
- Регулярное выражение для подтверждения того, является ли строка допустимым идентификатором в Python
- Разделить строку, сохраняющую индексы каждой подстроки
- Python: передача строки (r '') из строки ('')