How do I replace whitespaces with underscore and vice versa?


I want to replace whitespace with underscore in a string to create nice URLs. So that for example:

"This should be connected" becomes "This_should_be_connected" 

I am using Python with Django. Can this be solved using regular expressions?

6/17/2009 2:41:36 PM

Accepted Answer

You don't need regular expressions. Python has a built-in string method that does what you need:

mystring.replace(" ", "_")
1/18/2017 12:19:49 AM

Replacing spaces is fine, but I might suggest going a little further to handle other URL-hostile characters like question marks, apostrophes, exclamation points, etc.

Also note that the general consensus among SEO experts is that dashes are preferred to underscores in URLs.

import re

def urlify(s):

    # Remove all non-word characters (everything except numbers and letters)
    s = re.sub(r"[^\w\s]", '', s)

    # Replace all runs of whitespace with a single dash
    s = re.sub(r"\s+", '-', s)

    return s

# Prints: I-cant-get-no-satisfaction"
print(urlify("I can't get no satisfaction!"))

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow