2016-08-01 2 views
-5

Предположим, у меня есть строка, такие как:Удаление номера вперемешку с буквами из строки

string = 'This string 22 is not yet perfect1234 and 123pretty but it can be.' 

Я хочу, чтобы удалить все номера , которые смешиваются со словами, такие как 'perfect1234' и '123pretty', но не'22' , с моей строки и получить выход следующим образом:

string = 'This string 22 is not yet perfect and pretty but it can be.' 

есть ли способ сделать это в Python с использованием регулярных выражений или любой другой метамфетамина спосо? Любая помощь будет оценена по достоинству. Спасибо!

+1

Заменить все '\ d +' на '' '' – Tushar

+0

см. Здесь: http://stackoverflow.com/questions/12851791/removing-numbers-from-string – danielhadar

+1

Кажется, что OP хочет уничтожить только цифры, которые являются частью слова, а не любые цифры в строке. (Word граничные вопросы) – Keozon

ответ

1
import re 
re.sub(r'\d+', '', string) 
+0

должен использовать необработанные строковые литералы для регулярного выражения 'r '\ d +'', и это не проверяет, являются ли эти числа частью слова, также содержащего альфа-символы (что кажется намерением) – Keozon

+0

@Keozon Да, исходная строка лучше , Я бы изменил свой ответ. Но что вы имеете в виду, «цифры являются частью слова», можете ли вы привести пример? – kxxoling

+0

Спасибо за вашу помощь! Я не хочу хранить в моей строке что-либо, имеющее следующий формат: «700/-» , '+91 1234567891', '3appeared', 'Vora02261794300Will'. Номера или слова, такие как последние два в примере, не должны присутствовать в строке после обработки. – PJay

3
s = 'This string 22 is not yet perfect1234 and 123pretty but it can be.' 

new_s = "" 
for word in s.split(' '): 
    if any(char.isdigit() for char in word) and any(c.isalpha() for c in word): 
     new_s += ''.join([i for i in word if not i.isdigit()]) 
    else: 
     new_s += word 
    new_s += ' ' 

И как результат:

'This string 22 is not yet perfect and pretty but it can be.' 
+0

Сложнее, чем регулярное выражение (IMO), но, вероятно, быстрее в Python. Хороший ответ, и я думаю, что больше нацелен на первоначальные намерения OP. – Keozon

0

Код ниже проверяет каждый символ для цифры. Если это не цифра, она добавляет символ в конец исправленной строки.

string = 'This string is not yet perfect1234 and 123pretty but it can be.' 

CorrectedString = "" 
for characters in string: 
    if characters.isdigit(): 
     continue 
    CorrectedString += characters 
+0

Спасибо! Это работает! – PJay

0

Вы можете попробовать это просто присоединиться к функции и, а также ничего не импортировать

str_var='This string is not yet perfect1234 and 123pretty but it can be.' 

str_var = ''.join(x for x in str_var if not x.isdigit()) 
print str_var 

выход:

'This string is not yet perfect and pretty but it can be.' 
+1

Большое вам спасибо! Это должно помочь! – PJay

2

Если вы хотите сохранить цифры, которые сами по себе (не часть слова с альфа-символами в нем), это регулярное выражение выполнит эту работу (но, вероятно, есть способ сделать это проще):

import re 
pattern = re.compile(r"\d*([^\d\W]+)\d*") 
s = "This string is not yet perfect1234 and 123pretty but it can be. 45 is just a number." 
pattern.sub(r"\1", s) 
'This string is not yet perfect and pretty but it can be. 45 is just a number.' 

Здесь 45 осталось, поскольку оно не является частью слова.

Смежные вопросы