沈阳网站公司排名,网站建设p,简述网页制作的步骤,请人做网站多少钱✍ 个人博客#xff1a;https://blog.csdn.net/Newin2020?typeblog #x1f4dd; 专栏地址#xff1a;https://blog.csdn.net/newin2020/category_12801353.html #x1f4e3; 专栏定位#xff1a;为 0 基础刚入门 Python 的小伙伴提供详细的讲解#xff0c;也欢迎大佬们… ✍ 个人博客https://blog.csdn.net/Newin2020?typeblog 专栏地址https://blog.csdn.net/newin2020/category_12801353.html 专栏定位为 0 基础刚入门 Python 的小伙伴提供详细的讲解也欢迎大佬们一起交流~ 专栏简介在这个专栏我将带着大家从 0 开始入门 Python 的学习。在这个 Python 的新人系列专栏下将会总结 Python 入门基础的一些知识点方便大家快速入门学习~ ❤️ 如果有收获的话欢迎点赞 收藏 关注您的支持就是我创作的最大动力 在线正则表达式测试https://tool.oschina.net/regex/# 1. 正则表达式详解
介绍
正则表达式是一种用于匹配和操作文本的规则或语法
正则表达式拥有强大的文本处理能力支持匹配、查找、替换等操作广泛的应用领域例如编程、数据处理、文本处理等领域通用性强跨语言跨场景
语法 2. 正则表达式实战
案例一
现在有这样一串字符我需要根据需求查找出相应的字符信息。
hello world 12345 is book 123匹配出 hello 字符串 方法一hello方法二^hello 匹配出所有数字 方法\d 匹配出所有字符串 方法[a-zA-Z]
案例二
要求写一个正则表达式用来匹配邮箱而邮箱规则如下
结构前缀后缀前缀由大小写字母、数字、下划线、中划线等构成后缀由小写字母或数字构成并以 .com 结尾
123qq.com
testemail.com
xxx123.com匹配邮箱的正则表达式
匹配单个邮箱 方法^[a-zA-Z0-9_-][a-z0-9].com$ 匹配多个邮箱 方法[a-zA-Z0-9_-][a-z0-9].com
3. Python 正则表达式用法 - re 模块
3.1 re.search( )
在字符串中搜索匹配正则表达式的第一个位置。
import retext Hello, World!
result re.search(World, text)# 找到匹配
if result:print(找到匹配)print(result) # re.Match object; span(7, 12), matchWorldprint(result.span()) # (7, 12)print(result.group()) # World
else:print(未找到匹配)3.2 re.match( )
用于从字符串的起始位置匹配正则表达式如果起始位置匹配成功则返回一个匹配对象否则返回 None。
import retext Hello World
result re.match(Hello, text)# 匹配成功
if result:print(匹配成功)print(result) # re.Match object; span(0, 5), matchHelloprint(result.span()) # (0, 5)print(result.group()) # Hello
else:print(匹配失败)Tips re.match() 只从字符串的起始位置进行匹配而 re.search() 则会在字符串中搜索匹配的部分不限于起始位置。 再看个复杂点的正则表达式进一步理解一下 match 和 search 函数的区别。
# !/usr/bin/python3
# -*- coding: utf-8 -*-
# Authorgdx
# Filetest.py.py
# Projecttest_pythonimport re# 匹配1
text1 #123_23134qq.com
result re.match([a-zA-Z0-9_-][a-z0-9].com, text1)
# 匹配失败
if result:print(匹配成功)print(result)print(result.group())
else:print(匹配失败)# 匹配2
result re.search([a-zA-Z0-9_-][a-z0-9].com, text1)
# 匹配成功
if result:print(匹配成功)print(result) # re.Match object; span(5, 21), match123_23134qq.comprint(result.group()) # 123_23134qq.com
else:print(匹配失败)# 匹配3
text2 123_23134qq.com
result re.match([a-zA-Z0-9_-][a-z0-9].com, text2)
# 匹配成功
if result:print(匹配成功)print(result) # re.Match object; span(0, 16), match123_23134qq.comprint(result.group()) # 123_23134qq.com
else:print(匹配失败)3.3 re.findall( )
返回字符串中所有匹配正则表达式的子串。
import retext apple, banana, cherry
matches re.findall(a[a-z], text) # [apple, anana]
print(matches) 3.4 re.compile( )
re.complile() 用于编译正则表达式模式生成一个正则表达式对象。这个对象可以被多次使用从而提高效率。它接受一个字符串形式的正则表达式作为参数并返回一个编译后的正则表达式对象。
除了前面提到的可以直接使用编译后的对象调用 findall 等方法之外还可以设置一些标志参数来影响正则表达式的匹配行为。
常见的标志参数有
re.IGNORECASE 或 re.I 使匹配对大小写不敏感。re.MULTILINE 或 re.M 多行模式影响 ^ 和 $ 的匹配行为。re.DOTALL 或 re.S 使 . 匹配包括换行符在内的所有字符。
import repattern re.compile(hello, re.IGNORECASE)
text Hello World
result pattern.search(text)
if result:print(找到匹配)print(result) # re.Match object; span(0, 5), matchHelloprint(result.group()) # Hello
else:print(未找到匹配)可以再来看一个分割字符串的例子。
import redata_list[2小时10分20秒,3小时20分30秒,1小时10分5秒
]
pattern re.compile(小时|分|秒)
for i in data_list:res pattern.split(i)print(res)[2, 10, 20, ][3, 20, 30, ][1, 10, 5, ]3.5 ( ) 分组
使用括号 () 进行分组可以提取匹配的子串。
import repattern re.compile(r(\d{3})-(\d{3})-(\d{4}))
text My phone number is 123-456-7890
result pattern.search(text)
if result:print(result.group(1)) # 123print(result.group(2)) # 456print(result.group(3)) # 7890Tips 这里的 r 表示原始字符串避免一些字符需要额外的转义。 3.6 re.sub( )
使用 re.sub() 函数可以进行替换操作。
import retext Hello, World!
new_text re.sub(World, Python, text)
print(new_text) # Hello, Python!我们再结合前面的分组方法看一个更复杂点的例子我想要将一串手机号的中间 4 个数字进行加密处理我们
import re# 方法一分两组
pattern re.compile(r(\d{3})\d{4}(\d{3}))
text 我有几个手机号分别是136123456713312345671797654321
new_text pattern.sub(r\1****\2, text)
print(new_text) # 我有几个手机号分别是136****567133****567179****321# 方法二分三组
pattern re.compile(r(\d{3})(\d{4})(\d{3}))
text 我有几个手机号分别是136123456713312345671797654321
new_text pattern.sub(r\1****\3, text)
print(new_text) # 我有几个手机号分别是136****567133****567179****321