Remove Numbers from a String in Python

By James L.

In this guide, we will explore various methods to remove numbers from a string in Python.

We will discuss the following methods:

  • Using join() and isdigit() with a generator expression
  • Using for loop
  • Using translate() and maketrans() function
  • Using filter() and isdigit()
  • Using re.sub() function

# Using join() and isdigit() with a generator expression

You can use the join() method along with a generator expression and the isdigit() method to remove numbers from a string in Python.

Here’s an example:

my_str = "Python3 is 29 awesome"

new_str = ''.join(char for char in my_str if not char.isdigit())

print(new_str)  # Output: 'Python is  awesome'

In this example, the generator expression iterates through each character in the original string my_str. The isdigit() method is used to check if a character is a digit. Characters that are not digits are included in the result by using not char.isdigit(). Finally, the join() method concatenates the characters into a new string without the numbers.

Here’s how the generator expression works in the above example:

char for char in my_str: Iterates over each character char in the string my_str.

if not char.isdigit(): Checks if the character is not a digit.

''.join(...): Joins the character that passes the condition (if not char.isdigit()) into a new string.

Don’t confuse generator expressions with list comprehensions. Generator expressions use parentheses (), while list comprehensions use square brackets [].

In the above example, you can use list comprehension instead of generator expression. However, it is important to note that generator expressions are more memory efficient compared to list comprehensions.

The resulting new string might still have undesired spaces. If you wish to eliminate these spaces, I recommend checking my blog post that explains how to remove unwanted spaces from a string in Python.

# Using for loop

You can also use the for loop to remove numbers from a string.

Here’s an example:

my_str = "Python3 is 29 awesome"

# Initialize an empty string to store characters without digits
new_str = ""

# Iterate through each character in the original string
for char in my_str:
    # Check if the character is not a digit
    if not char.isdigit():
        # Append the character to the new string if it is not a digit
        new_str += char

print(new_str)  # Output: 'Python is  awesome'

In this example, the for loop iterates through each character in the original string my_str. If the character is not a digit (checked using isdigit()), it is added to the new string new_str. The final result will be a new string new_str with numbers removed.

# Using translate() and str.maketrans() methods

Here’s how you can use translate() and str.maketrans() methods to remove numbers from a string in Python:

my_str = "Python3 is 29 awesome"

# Create a translation table with str.maketrans()
translation_table = str.maketrans('', '', '0123456789')

# Use translate() to remove the numbers from the string
new_str = my_str.translate(translation_table)

print(new_str)  # Output: 'Python is  awesome'

The translate() method replaces or removes specific characters in a string based on a translation table.

We use the str.maketrans() method to create a translation table.

The basic syntax of the str.maketrans() method is:

str.maketrans(x, y, z)

x: Characters to be replaced.
y: Corresponding replacement characters.
z: Characters to be removed (mapped to None).

Empty strings ('') in x and y indicate that we don’t want to perform any character replacements, and only the characters specified in the third argument ('0123456789') are to be removed.

# Using filter() and isdigit() methods

Here’s how you can use the filter() function along with the isdigit() method to remove numbers from a string in Python:

my_str = "Python3 is 29 awesome"

# Use filter() with a lambda function to keep only the non-digit characters
new_str = ''.join(filter(lambda x: not x.isdigit(), my_str))

print(new_str)  # Output: 'Python is  awesome'

In this example, the filter() function is used along with a lambda function. The lambda function checks each character in the original string and keeps only those that are not digits. The filter() function then returns a new string that contains only the characters for which the lambda function returned True. Finally, the join() method is used to combine all the characters in the filtered string into a new string with the numbers removed.

# Using regular expressions

You can use the re.sub() method of the re module in Python to remove numbers from a string.

Here’s an example:

import re

my_str = "Python3 is 29 awesome"

# Define a regex pattern to match numbers
pattern = re.compile(r'\d')

# Use re.sub() function to replace all digits with empty strings
new_str = re.sub(pattern, '', my_str)

print(new_str)  # Output: 'Python is  awesome'

In this example, the re.compile() function is used to compile a regular expression pattern \d into a regular expression object. The re.sub() function is then used to replace any digits (\d) with an empty string (''). The result is a new string without numbers.

The regex pattern \d matches any digits (0-9).

Conclusion

In conclusion, this guide has provided a comprehensive overview of different methods to remove numbers from a string in Python. 

Use the join() and isdigit() methods with a generator expression for a simple and straightforward solution.

Use the for loop if you want to manually remove numbers from a string. It can be a bit slower for large strings.

Use translate() and str.maketrans() for efficient removal of numbers from a string.

Use filter() along with the lambda function if you need a flexible and dynamic approach for selectively removing numbers from a string.

Use regular expressions for complex scenarios. It can be slower than other methods.

Each method has its own strengths, and the choice of which to use may depend on factors such as readability, performance, or personal preference. 

Feel free to experiment with these methods and choose the one that best fits your specific requirements. 

Happy coding → 3000