How to write a Python Regular Expression to validate numbers?

Regular expressions provide powerful pattern matching for validating different number formats in Python. The re module offers functions like re.match() to check if strings conform to numeric patterns.

There are several common approaches to validate numbers using regular expressions ?

Validate Integer Numbers

To validate integers, we use the pattern ^[+-]?\d+$ which matches optional sign followed by one or more digits ?

import re

# Test different integer values
numbers = ["123", "-456", "+789", "123abc", ""]

# Regex pattern for integers
pattern = r"^[+-]?\d+$"

def validate_integer(text):
    return bool(re.match(pattern, str(text)))

# Test each number
for num in numbers:
    result = validate_integer(num)
    print(f"'{num}' is valid integer: {result}")
'123' is valid integer: True
'-456' is valid integer: True
'+789' is valid integer: True
'123abc' is valid integer: False
'' is valid integer: False

Pattern Breakdown

  • ^ − Start of string
  • [+-]? − Optional plus or minus sign
  • \d+ − One or more digits
  • $ − End of string

Validate Real Numbers (Decimals)

For decimal numbers, the pattern ^[+-]?\d+(\.\d+)?$ allows optional decimal places ?

import re

# Test different decimal values
numbers = ["3.14", "-2.71", "123", "123.", ".456", "abc"]

# Regex pattern for real numbers
pattern = r"^[+-]?\d+(\.\d+)?$"

def validate_real_number(text):
    return bool(re.match(pattern, str(text)))

# Test each number
for num in numbers:
    result = validate_real_number(num)
    print(f"'{num}' is valid real number: {result}")
'3.14' is valid real number: True
'-2.71' is valid real number: True
'123' is valid real number: True
'123.' is valid real number: False
'.456' is valid real number: False
'abc' is valid real number: False

Pattern Breakdown

  • ^[+-]?\d+ − Optional sign and digits
  • (\.\d+)? − Optional decimal point with digits

Validate Comma-Separated Numbers

For numbers with comma separators (like 1,234.56), we use a more complex pattern ?

import re

# Test comma-separated numbers
numbers = ["1,234.56", "5,678", "-2,345.78", "1,23", "12,34", "1234"]

# Regex pattern for comma-separated numbers
pattern = r"^[+-]?(\d{1,3}(,\d{3})*|\d+)(\.\d+)?$"

def validate_comma_number(text):
    return bool(re.match(pattern, str(text)))

# Test each number
for num in numbers:
    result = validate_comma_number(num)
    print(f"'{num}' is valid comma number: {result}")
'1,234.56' is valid comma number: True
'5,678' is valid comma number: True
'-2,345.78' is valid comma number: True
'1,23' is valid comma number: False
'12,34' is valid comma number: False
'1234' is valid comma number: True

Pattern Breakdown

  • \d{1,3} − 1-3 digits at start
  • (,\d{3})* − Zero or more groups of comma + 3 digits
  • |\d+ − OR any sequence of digits (no commas)

Comparison Summary

Number Type Pattern Example Valid Example Invalid
Integer ^[+-]?\d+$ 123, -456 12.3, abc
Real/Decimal ^[+-]?\d+(\.\d+)?$ 3.14, -2.5 123., .456
Comma-Separated ^[+-]?(\d{1,3}(,\d{3})*|\d+)(\.\d+)?$ 1,234.56 12,34

Conclusion

Regular expressions provide flexible number validation in Python. Use ^[+-]?\d+$ for integers, ^[+-]?\d+(\.\d+)?$ for decimals, and more complex patterns for formatted numbers like comma-separated values.

Updated on: 2026-03-24T19:14:40+05:30

442 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements