Python实用正则表达式归纳

本文涉及的产品
.cn 域名,1个 12个月
简介: Python实用正则表达式归纳

实用正则表达式归纳
根据日常工作、学习经常用到的场景总结归纳如下表所示:
image.png
结合小示例如下:

匹配用户名

import re

user_names = ['abc123','user_name12','test-123','name@123', 'ab', 'User123']

pattern = re.compile('^[0-9a-z_-]{3,16}$')

for user in user_names:
    if pattern.match(user):
        print('matched: ', user)
    else:
        print('No matched!')

运行结果如下:
matched:  abc123
matched:  user_name12
matched:  test-123
No matched!
No matched!
No matched!

说明:这个正则表达式 ^[0-9a-z_-]{3,16}$ 的含义是:匹配长度在 3 到 16 之间的由数字、小写字母、下划线和短横线组成的字符串。

下面是一些匹配和不匹配的示例:

匹配:

  • abc123
  • user_name12
  • test-123

不匹配:

  • ab(长度不足)
  • User123(包含大写字母)
  • name@123(包含特殊字符)

这个正则表达式可用于验证用户注册名、用户名、密码等情况,要求长度在3到16位,并且只包含数字、小写字母、下划线和短横线。

匹配密码

import re


passwords = ['abc123','admin_12','password-1234','name@123', 'ab', 'Abc123']

pattern = re.compile('^[0-9a-z_-]{6,18}$')

for password in passwords:
    if pattern.match(password):
        print('matched: ', password)
    else:
        print('No matched!')


运行结果如下:
matched:  abc123
matched:  admin_12
matched:  password-1234
No matched!
No matched!
No matched!

说明:这个正则表达式 ^[a-z0-9_-]{6,18}$ 的含义是:匹配长度在 6 到 18 之间的由小写字母、数字、下划线和短横线组成的字符串。

以下是一些示例,说明哪些符合该正则表达式,哪些不符合:

匹配:

  • abc123
  • admin_12
  • password-1234

不匹配:

  • abc(长度不足)
  • Abc123(包含大写字母)
  • name@123(包含特殊字符)

这个正则表达式适用于验证密码、用户名等情况,要求长度在 6 到 18 位,并且只包含小写字母、数字、下划线和短横线。

手机号码

import re

mobile_nums = ['13612345678','+8613912345678','13888888888', '32345678901','+86111223344','1361234']

pattern = re.compile('^(?:\+86)?1[3-9]\d{9}$')

for mobile in mobile_nums:
    if pattern.match(mobile):
        print('matched: ', mobile)
    else:
        print('No matched!')

 运行结果如下:
matched:  13612345678
matched:  +8613912345678
matched:  13888888888
No matched!
No matched!
No matched!

说明:这个正则表达式 ^(?:+86)?1[3-9]\d{9}$ 的含义是:匹配中国大陆手机号码,可以带有国家代码 +86 或不带,在国家代码后面紧跟以 1 开头的手机号码,其中第二位为 3 到 9 之间的数字,后面跟着任意 9 个数字字符。

以下是一些示例,说明哪些符合该正则表达式,哪些不符合:

匹配:

  • 13612345678
  • +8613912345678
  • 13888888888

不匹配:

  • 32345678901(不是以 1 开头)
  • +86111223344(号段不在 3 到 9 之间)
  • 1361234(长度不足)

这个正则表达式适用于验证中国大陆手机号码格式,满足指定的要求。

颜色的十六进制

import re

colors = ['#ffffff','#123abc','abc','1234567','#12ab','#xyz123']

pattern = re.compile('^#?([a-f0-9]{6}|[a-f0-9]{3})$')

for color in colors:
    if pattern.match(color):
        print('matched: ', color)
    else:
        print('No matched!')

运行结果如下:
matched:  #ffffff
matched:  #123abc
matched:  abc
No matched!
No matched!
No matched!

说明:这个正则表达式 ^#?([a-f0-9]{6}|[a-f0-9]{3})$ 的含义是:匹配十六进制颜色代码,可以以 # 开头或不以 # 开头,后面跟着 3 位或者 6 位由 0-9 和 a-f 组成的字符。

以下是一些示例,说明哪些符合该正则表达式,哪些不符合:

匹配:

- #ffffff
- #123abc

abc
不匹配:

- 1234567(超过 6 位)
- #12ab(未满足 36 位)
- #xyz123(包含非法字符)

这个正则表达式适用于验证十六进制颜色代码的格式,确保符合指定的长度和字符范围。

电子邮箱

import re

emails = ['example123@email.com','user.name123@example.co.uk','user+test@sub.domain.com','invalid.email@domain','email@domain..com','user name@email.com']

pattern = re.compile('\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}')

for email in emails:
    if pattern.match(email):
        print('matched: ', email)
    else:
        print('No matched!')


运行结果如下:
matched:  example123@email.com
matched:  user.name123@example.co.uk
matched:  user+test@sub.domain.com
No matched!
No matched!
No matched!

说明:这个正则表达式 \w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+.)+[A-Za-z]{2,14} 的含义是匹配标准的邮箱地址格式。下面是一些示例说明:

  • 用户名部分 `\w[-\w.+]*:允许包含字母、数字以及一些特殊字符(例如点号、下划线、百分号、加号和减号)。
  • @符号 @:必须包含 @ 符号。
  • 域名部分 [A-Za-z0-9][-A-Za-z0-9]+.:可以包含字母、数字以及连字符和点号(用于子域名)。
  • 顶级域名 [A-Za-z]{2,14}:至少包含两个字母,用于匹配常见的顶级域名(如com、net、org等)。

匹配:

  • example123@email.com
  • user.name123@example.co.uk
  • user+test@sub.domain.com

不匹配:

  • invalid.email@domain(顶级域名不足两个字符)
  • email@domain..com(连续的点号)
  • user name@email.com(包含空格)

该正则表达式能够有效匹配常见的邮箱地址格式,确保符合用户名、@符号、域名和顶级域名的标准。

URL

import re

pattern = re.compile('^(https?:\/\/)?([a-z\d-]+\.)+[a-z]{2,}(\/[\w\d%+\-./]*)*$')


url_lst = ['https://www.example.com','http://subdomain.domain.co.uk/page1','https://www.example.com/path/to/page.html''ftp://example.com','https://www.example.com?query=123','http://www.example.invalid']


for url in url_lst:
    if pattern.match(url):
        print('matched: ', url)
    else:
        print('No matched!')

 运行结果如下:
matched:  https://www.example.com
matched:  http://subdomain.domain.co.uk/page1
No matched!
No matched!
matched:  http://www.example.invalid

说明:这个正则表达式 ^(https?:\/\/)?([a-z\d-]+.)+[a-z]{2,}(\/[\w\d%+-./])$ 用于匹配常见的 URL 格式。以下是一些示例说明:

匹配:

不匹配:

这个正则表达式能够有效匹配常见的 URL 格式,包括协议、域名、顶级域名和路径部分,但可能需要根据具体需求进一步调整以包含更多可能的情况。

IP地址

import re

pattern = re.compile('((2[0-4]\d|25[0-5]|[01]?\d\d?)\\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)')


ipv4_lst = ['192.168.1.1','255.255.255.0','10.0.0.1','256.168.1.1','192.168.1.','1.1.1']

for ip in ipv4_lst:
    if pattern.match(ip):
        print('matched: ', ip)
    else:
        print('No matched!')


运行结果如下:
matched:  192.168.1.1
matched:  255.255.255.0
matched:  10.0.0.1
No matched!
No matched!
No matched!

说明:这个正则表达式 ((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) 用于匹配 IPv4 地址格式,其中每个数字范围是从 0 到 255。以下是一些示例说明:

匹配:

  • 192.168.1.1
  • 255.255.255.0
  • 10.0.0.1

不匹配:

  • 256.168.1.1(超出了允许的范围)
  • 192.168.1.(末尾缺少数字)
  • 1.1.1(缺少完整的四组数字)

这个正则表达式能够有效匹配符合标准 IPv4 地址格式的字符串,确保每个数字在 0 到 255 的范围内。

这个正则表达式 ((2[0-4]\d|25[0-5]|[01]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) 的语法可以解释如下:

( 和 ):用于分组,将其中的内容视为一个整体。
(2[0-4]\d|25[0-5]|[01]?\d\d?):表示匹配 0 到 255 之间的数字。具体说明如下:
2[0-4]\d:匹配 200 到 249 之间的数字。
25[0-5]:匹配 250 到 255 之间的数字。
[01]?\d\d?:匹配 0 到 199 之间的数字,包括各种可能的组合(如 01、10、100 等)。
(2[0-4]\d|25[0-5]|[01]?\d\d?).:匹配三组符合上述范围内的数字后跟一个点号。
{3}:指定前面的分组恰好重复三次。
(2[0-4]\d|25[0-5]|[01]?\d\d?):匹配最后一组符合条件的数字。
这个正则表达式的结构设计得很巧妙,能够有效地匹配符合 IPv4 地址格式的字符串,确保每个数字在正确的范围内,并使用点号作为分隔符。

HTML标签

import re

pattern = re.compile('^<([a-z]+)([^<])*(?:>(.*)<\\/\\1>)$')

html_lst = ['<div>Hello</div>','<p>This is a paragraph</p>','<span class="highlight">Highlighted text</span>','<strong>Bold text','<ul><li>Item 1</li></ul>','<a href="example.com">Link</a>']

for html in html_lst:
    if pattern.match(html):
        print('matched: ', html)
    else:
        print('No matched!')

运行结果如下:
matched:  <div>Hello</div>
matched:  <p>This is a paragraph</p>
matched:  <span class="highlight">Highlighted text</span>
No matched!
matched:  <ul><li>Item 1</li></ul>
matched:  <a href="example.com">Link</a>

说明:这个正则表达式 ^<([a-z]+)([^<])(?:>(.)<\/\1>)$ 用于匹配简单的 HTML 标签。以下是一些示例说明:

匹配:

  • Hello
  • This is a paragraph

  • Highlighted text
    • Item 1
  • Link

不匹配:

  • Bold text

在上述示例中,只有与正则表达式匹配的 HTML 标签会被识别,因为正则表达式要求标签要有正确的开头和闭合,并且内容要符合标签名称。

utf-8编码下的汉字范围
import re

pattern = re.compile('^[\u2E80-\u9FFF]+')


utf_lst = ['你好世界, 中文测试','Hello 你好, 12345']

for utf in utf_lst:
    if pattern.match(utf):
        print('matched: ', utf)
    else:
        print('No matched!')

运行结果如下:
matched:  你好世界, 中文测试
No matched

说明:这个正则表达式 ^[\u2E80-\u9FFF]+ 用于匹配中文字符范围(包括繁体字),Unicode 范围为 \u2E80 到 \u9FFF。这表示匹配从中文第一个汉字(四角号码为2000)到最后一个汉字(四角号码为9FFF)之间的所有字符。

这个正则表达式将只匹配完全由中文字符组成的字符串,而不会匹配包含其他类型字符的字符串。

示例:

  • 匹配:你好世界, 中文测试
  • 不匹配:Hello 你好, 12345

总体来说,这个正则表达式适用于需要验证输入是否仅包含中文字符的情况。

  1. 0-9a-z_- ↩︎
  2. a-z0-9_- ↩︎
  3. \u2E80-\u9FFF ↩︎
相关文章
|
3月前
|
Python
"揭秘!Python如何运用神秘的正则表达式,轻松穿梭于网页迷宫,一键抓取隐藏链接?"
【8月更文挑战第21天】Python凭借其强大的编程能力,在数据抓取和网页解析领域表现出高效与灵活。通过结合requests库进行网页请求及正则表达式进行复杂文本模式匹配,可轻松提取网页信息。本示例展示如何使用Python和正则表达式解析网页链接。首先确保已安装requests库,可通过`pip install requests`安装。接着,利用requests获取网页内容,并使用正则表达式提取所有`&lt;a&gt;`标签的`href`属性。
40 0
|
17天前
|
Python
【收藏备用】Python正则表达式的7个实用技巧
【收藏备用】Python正则表达式的7个实用技巧
16 1
|
26天前
|
Python
Python 正则表达式高级应用指南
正则表达式是文本模式匹配的强大工具,Python 的 `re` 模块支持其操作。本文介绍正则表达式的高级应用,包括复杂模式匹配(如邮箱、电话号码)、分组与提取、替换操作、多行匹配以及贪婪与非贪婪模式的区别。通过示例代码展示了如何灵活运用这些技巧解决实际问题。
22 7
|
18天前
|
JavaScript 前端开发 Scala
Python学习十:正则表达式
这篇文章是关于Python中正则表达式的使用,包括re模块的函数、特殊字符、匹配模式以及贪婪与非贪婪模式的详细介绍。
14 0
|
23天前
|
数据采集 开发者 Python
Python正则表达式之re.compile函数
`re.compile`是Python正则表达式处理中一个强大的工具,它通过预先编译正则表达式,不仅提升了执行效率,还增强了代码的组织性和可读性。掌握其使用,对于涉及文本分析、数据清洗、日志处理等领域的Python开发者来说,是非常必要的技能。正确并高效地应用这一功能,可以显著提升程序的性能和维护性。
28 0
|
2月前
|
索引 Python
30天拿下Python之正则表达式
30天拿下Python之正则表达式
15 0
|
2月前
|
数据采集 Python
Python正则表达式提取车牌号
Python正则表达式提取车牌号
23 0
|
2月前
|
数据采集 Python
Python正则表达式提取车牌号
Python正则表达式提取车牌号
26 0
|
2月前
|
存储 数据处理 Python
Python中利用正则表达式进行文本处理
【9月更文挑战第24天】本文通过深入浅出的方式,介绍如何在Python中使用正则表达式进行文本处理。我们将从基础语法开始,逐步深入到复杂匹配模式的构建,最后通过实际案例展示正则表达式在文本分析中的高效应用。文章旨在帮助读者掌握正则表达式的使用技巧,提高数据处理效率。
|
3月前
|
安全 数据安全/隐私保护 Python
python中的正则表达式
python中的正则表达式