Python delete character in a string

Question:

I’m stuck, I’ve searched several ways and I can’t get the correct output.

string = "Hello! I have a Big!!! problem 666 is not a good number__$"
ns =''.join([i for i in string if i.isalpha()])
print(ns)

HelloIhaveaBigproblemisnotagoodnumber

I want this output:

Hello I have a Big problem is not a good number

Can you help me? Thank you!!

Asked By: JRT

||

Answers:

Use regex to replace all non alpha characters.

import re

input = "Hello! I have a Big!!! problem 666 is not a good number__$"

print(re.sub('[Wd_]+', ' ', input))

Ouput:

Hello I have a Big problem is not a good number
Answered By: Captain Caveman

A lot of simple problems can be solved without the re library.

For this case, you can filter all characters that are not in the alphabet, or empty spaces:

from string import ascii_lowercase
ns = ''.join(filter(lambda c: c.lower() in ascii_lowercase+' ', s))
while '  ' in ns: ns = ns.replace('  ',' ')


# output:
# 'Hello I have a Big problem is not a good number'

Repeated spaces are filtered in the one-liner while-loop found above.


To work with non-english characters, you can replace ascii_lowercase with the desired choice of characters.

Answered By: C-3PO

Filter uisng re & remove them using re.sub

import re
string = "Hello! I have a Big!!! problem 666 is not a good number__$"
print (re.sub('[^a-zA-Z]+', ' ', string))

output #

Hello I have a Big problem is not a good number 
Answered By: Bhargav

You can use:

import re

string = "Hello! I have a Big!!! problem 666 is not a good number__$"
regex = re.compile('[^a-zA-Z ]')
print(regex.sub('', string))

And it will print:

Hello I have a Big problem is not a good number

(With double space between "problem" and "is")

If you want to remove the double space you write it like this:

import re

string = "Hello! I have a Big!!! problem 666 is not a good number__$"
regex = re.compile('[^a-zA-Z ]')
string = regex.sub('', string)
print(string.replace('  ', ' '))

And now the output will be:

Hello I have a Big problem is not a good number

Answered By: segev_gr

You could increase the conditions used for each character, e.g.,

ns =''.join([i for i in string if i == " " or i.isalpha()])

But there is a problem with sequences like "666 " that leave an extra space in the text.

Instead, you could use a regex to break the string down into a list of words and intervening non-word text. Filter out the stuff you don’t want, and then remove any items where the word itself went to zero size.

import re

string = "Hello! I have a Big!!! problem 666 is not a good number__$"
tmp = []

for word, other in re.findall(r"(w+)([^w]*)", string):
    # strip non-alpha
    word = "".join(c for c in word if c.isalpha())
    # preserve only spaces
    other = "".join(c for c in other if c == " ")
    # only add if word still exists
    if word:
        tmp.append(word + other)
ns = "".join(tmp)
print(ns)

Output

Hello I have a Big problem is not a good number
Answered By: tdelaney
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.