DEV Community

Melissa
Melissa

Posted on

Understanding Regex in Python: A Practical Example

Intro

Regular expressions, commonly known as regex, are powerful tools for pattern matching and text manipulation. They allow developers to search, match, and manipulate strings with precision. In this blog post, we'll explore how regex is used in Python through a practical example from a customer validation function.

The Context

Consider a scenario where we need to validate customer information, specifically their first name, last name, and mobile number. The following code snippet demonstrates how regex is used to validate a mobile number in a Python class:

from sqlalchemy.orm import validates
import re

class Customer:
    @validates('first_name', 'last_name', 'mobile')
    def validate(self, key, value):
        if key == 'first_name' or key == 'last_name':
            if len(value) == 0:
                raise ValueError(f'Server validation error: No {"first name" if key == "first_name" else "last name"}')
        elif key == 'mobile':
            mobile = r"((([\(]?[0-9]{3,4}[\)]\s?)|([0-9]{3,4}[\-]))[0-9]{3,4}[\-][0-9]{4})|([0-9]{10,12})"
            mobile_regex = re.compile(mobile)
            if not mobile_regex.fullmatch(value):
                raise ValueError('Server validation error: Invalid mobile number')

        return value
Enter fullscreen mode Exit fullscreen mode

Breaking Down the Regex

In the validate method, we use regex to ensure that the mobile number provided by the customer adheres to a specific format. Let's break down the regex pattern used:

mobile = r"((([\(]?[0-9]{3,4}[\)]\s?)|([0-9]{3,4}[\-]))[0-9]{3,4}[\-][0-9]{4})|([0-9]{10,12})"
Enter fullscreen mode Exit fullscreen mode

Parentheses and Hyphens:
([(]?[0-9]{3,4}[)]\s?): This part of the regex matches an optional opening parenthesis (, followed by 3 or 4 digits, an optional closing parenthesis ), and an optional space.
([0-9]{3,4}[-]): This part matches 3 or 4 digits followed by a hyphen -.

Main Number:
[0-9]{3,4}[-][0-9]{4}: This part matches 3 or 4 digits, a hyphen, and then 4 digits.
Alternative Format:

([0-9]{10,12}):
This part matches a sequence of 10 to 12 digits, allowing for a more compact mobile number format without separators.

Using Regex for Validation

The regex pattern is compiled using re.compile(mobile), and the fullmatch method is used to check if the entire string matches the pattern:

mobile_regex = re.compile(mobile)
if not mobile_regex.fullmatch(value):
    raise ValueError('Server validation error: Invalid mobile number')
Enter fullscreen mode Exit fullscreen mode

If the mobile number does not match the regex pattern, a ValueError is raised, indicating an invalid mobile number.

Conclusion

Regex is a versatile tool for string validation and manipulation. In this example, we used regex to validate a mobile number, ensuring it adheres to specific formats. By understanding and utilizing regex, developers can perform complex string operations with ease and precision.

Whether you're validating user input, searching for patterns in text, or performing text manipulation, regex provides a robust solution for your needs. Happy coding!

Image of AssemblyAI tool

Challenge Submission: SpeechCraft - AI-Powered Speech Analysis for Better Communication

SpeechCraft is an advanced real-time speech analytics platform that transforms spoken words into actionable insights. Using cutting-edge AI technology from AssemblyAI, it provides instant transcription while analyzing multiple dimensions of speech performance.

Read full post

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay