Replace all non-alphanumeric characters in a string

Each Answer to this Q is separated by one/two green lines.

I have a string with which i want to replace any character that isn’t a standard character or number such as (a-z or 0-9) with an asterisk. For example, “h^&ell`.,|o w]{+orld” is replaced with “h*ell*o*w*orld”. Note that multiple characters such as “^&” get replaced with one asterisk. How would I go about doing this?

Regex to the rescue!

import re

s = re.sub('[^0-9a-zA-Z]+', '*', s)

Example:

>>> re.sub('[^0-9a-zA-Z]+', '*', 'h^&ell`.,|o w]{+orld')
'h*ell*o*w*orld'

The pythonic way.

print "".join([ c if c.isalnum() else "*" for c in s ])

This doesn’t deal with grouping multiple consecutive non-matching characters though, i.e.

"h^&i => "h**i not "h*i" as in the regex solutions.

Try:

s = filter(str.isalnum, s)

in Python3:

s="".join(filter(str.isalnum, s))

Edit:
realized that the OP wants to replace non-chars with ‘*’. My answer does not fit

Use \W which is equivalent to [^a-zA-Z0-9_]. Check the documentation, https://docs.python.org/2/library/re.html

import re
s="h^&ell`.,|o w]{+orld"
replaced_string = re.sub(r'\W+', '*', s)
output: 'h*ell*o*w*orld'

update: This solution will exclude underscore as well. If you want only alphabets and numbers to be excluded, then solution by nneonneo is more appropriate.


The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Leave a Reply

Your email address will not be published.