How to Replace Characters in a String in Python
What you’ll build or solve
You’ll replace characters in a Python string using the two most practical approaches.
When this approach works best
Replacing characters in a string works best when you want to:
Learn Python on Mimo
- Clean input, like turning
/into in dates or removing separators from IDs. - Normalize text before comparing, like replacing spaces with
_in usernames. - Prepare text for output, like standardizing delimiters before writing files.
This is a bad idea when you need pattern-based rules, like “replace digits only if they appear after a #”. For that, use regular expressions.
Prerequisites
- Python 3 installed
- You know what a string variable is
Step-by-step instructions
1) Replace characters with replace()
Use str.replace(old, new) to replace every occurrence. Add a third argument to limit how many replacements happen.
Option A: Replace all occurrences (most common)
text="a-b-c"
fixed=text.replace("-","_")
print(fixed)# a_b_c
Option B: Replace only the first few occurrences
path="2026/02/18/report"
fixed=path.replace("/","-",1)
print(fixed)# 2026-02/18/report
What to look for: replace() returns a new string, so assign the result back to a variable.
name="ana-maria"
name.replace("-"," ")
print(name)# still "ana-maria"
Correct approach:
name=name.replace("-"," ")
print(name)
2) Replace multiple characters with translate()
If you need to replace several single characters, translate() keeps your code short and readable.
LUA
text="report-2026/02/18:final"
table=str.maketrans({
"-":"_",
"/":"_",
":":"_",
})
fixed=text.translate(table)
print(fixed)
What to look for: translate() works best for single-character replacements. For multi-character swaps like "->" to "→", use replace().
Examples you can copy
Example 1: Convert date separators for filenames
date_str="2026/02/18"
safe=date_str.replace("/","-")
print(safe)# 2026-02-18
Example 2: Normalize a username by replacing spaces
username="Noor Ali"
normalized=username.lower().replace(" ","_")
print(normalized)# noor_ali
Example 3: Remove common separators from a phone number
phone="+382 (67) 123-456"
clean= (
phone.replace(" ","")
.replace("(","")
.replace(")","")
.replace("-","")
.replace("+","")
)
print(clean)
Example 4: Replace several separators with underscores
name="a-b/c:d"
table=str.maketrans({"-":"_","/":"_",":":"_"})
fixed=name.translate(table)
print(fixed)
Example 5: Replace a multi-character token
expr="a->b"
fixed=expr.replace("->","→")
print(fixed)
Common mistakes and how to fix them
Mistake 1: Forgetting to store the returned string
What you might do
text="a-b"
text.replace("-","_")
print(text)
Why it breaks
Strings are immutable, so replace() does not modify the original string.
Corrected approach
text="a-b"
text=text.replace("-","_")
print(text)
Mistake 2: Using translate() for multi-character replacements
What you might do
text="a->b"
table=str.maketrans({"->":"→"})
fixed=text.translate(table)
Why it breaks
translate() maps single characters, not multi-character sequences.
Corrected approach
text="a->b"
fixed=text.replace("->","→")
print(fixed)
Troubleshooting
If nothing changes, do this:
Assign the result of replace() or translate() to a variable.
If replacements happen too many times, do this:
Use replace(old, new, count) to limit how many replacements happen.
If you need to replace several different single characters, do this:
Use translate() with str.maketrans(...) instead of long replace() chains.
If you need to replace a multi-character token, do this:
Use replace() with the full token, like text.replace("->", "→").
Quick recap
- Use
replace()for simple character swaps. - Add
counttoreplace()to limit replacements. - Use
translate()for many single-character replacements. - Use
replace()for multi-character tokens.
Join 35M+ people learning for free on Mimo
4.8 out of 5 across 1M+ reviews
Check us out on Apple AppStore, Google Play Store, and Trustpilot