首页 > 编程语言 >玩转Python正则表达式:实用教程带你快速入门

玩转Python正则表达式:实用教程带你快速入门

时间:2023-07-12 09:11:08浏览次数:52  
标签:实用教程 匹配 string Python pattern re 玩转 print result

引言

正则表达式是一种强大的文本匹配和处理工具,广泛应用于各种编程语言中。在Python中,我们可以使用内置的re模块来处理正则表达式。本文将带您从入门到精通,逐步介绍Python中的正则表达式用法,并提供实例演示。

1. 正则表达式基础

1.1 什么是正则表达式

正则表达式是一种用于描述和匹配字符串模式的表达式。它由一系列字符和特殊字符组成,用于在文本中进行搜索和替换操作。

1.2 基本匹配规则

正则表达式中的基本匹配规则包括普通字符的匹配、点号的匹配任意字符、转义字符的使用等。

import re

pattern = r"abc"  # 匹配字符串 "abc"
string = "xyz abc def"

result = re.findall(pattern, string)
print(result)  # Output: ['abc']

1.3 字符类和预定义字符类

字符类用于匹配指定范围内的字符,预定义字符类则表示常见的字符组合,如数字、字母、空白字符等。

import re

pattern = r"[0-9]"  # 匹配任意数字字符
string = "abc 123 def"

result = re.findall(pattern, string)
print(result)  # Output: ['1', '2', '3']

1.4 量词和贪婪匹配

量词用于指定匹配的次数,如匹配0次或多次、匹配1次或多次等。贪婪匹配是指尽可能多地匹配字符,非贪婪匹配则尽可能少地匹配字符。

import re

pattern = r"a+"  # 匹配一个或多个连续的字符 "a"
string = "aaaabbb"

result = re.findall(pattern, string)
print(result)  # Output: ['aaaa']

1.5 边界匹配

边界匹配用于限定匹配的位置,如行的开头、行的结尾、单词的边界等。

import re

pattern = r"\bhello\b"  # 匹配整个单词 "hello"
string = "hello world"

result = re.findall(pattern, string)
print(result)  # Output: ['hello']

2. 使用re模块

2.1 re模块的导入

在使用Python进行正则表达式操作之前,我们需要先导入re模块。

import re

2.2 re.match()方法

re.match()方法用于从字符串的开头开始匹配模式,如果匹配成功,则返回一个匹配对象;否则返回None。

import re

pattern = r"hello"
string = "hello world"

result = re.match(pattern, string)

if result:
    print("Match found!")
else:
    print("No match")

2.3 re.search()方法

re.search()方法用于在字符串中搜索匹配模式,如果找到任意位置的匹配,则返回一个匹配对象;否则返回None。

import re

pattern = r"world"
string = "hello world"

result = re.search(pattern, string)

if result:
    print("Match found!")
else:
    print("No match")

2.4 re.findall()方法

re.findall()方法用于在字符串中搜索所有匹配模式的子串,并将它们作为列表返回。

import re

pattern = r"\d+"
string = "I have 10 apples and 20 oranges."

result = re.findall(pattern, string)

print(result)  # Output: ['10', '20']

2.5 re.sub()方法

re.sub()方法用于在字符串中搜索匹配模式的子串,并将其替换为指定的字符串。

import re

pattern = r"apple"
string = "I have an apple."

result = re.sub(pattern, "banana", string)

print(result)  # Output: "I have an banana."

3. 正则表达式的高级用法

3.1 分组和捕获

正则表达式中的分组和捕获允许我们将匹配的子串提取出来,并在后续操作中使用。

import re

pattern = r"(\d+)-(\d+)-(\d+)"  # 匹配日期格式 "YYYY-MM-DD"
string = "Today is 2023-06-28."

result = re.search(pattern, string)

if result:
    year = result.group(1)
    month = result.group(2)
    day = result.group(3)
    print(f"Year: {year}, Month: {month}, Day: {day}")
else:
    print("No match")

3.2 非贪婪匹配

非贪婪匹配是指尽可能少地匹配字符,可以通过在量词后加上"?"来实现。

import re

pattern = r"a+?"
string = "aaaaa"

result = re.findall(pattern, string)
print(result)  # Output: ['a', 'a', 'a', 'a', 'a']

3.3 向前界定和向后界定

向前界定和向后界定用于限定匹配的前后条件,但不包括在匹配结果中。

import re

pattern = r"(?<=@)\w+"  # 匹配邮箱地址中的用户名
string = "[email protected]"

result = re.findall(pattern, string)
print(result)  # Output: ['example']

3.4 反向引用

反向引用用于在正则表达式中引用前面已经匹配的子串。

import re

pattern = r"(\w+)\s+\1"  # 匹配重复的单词
string = "hello hello world world"

result = re.findall(pattern, string)
print(result)  # Output: ['hello', 'world']

3.5 零宽断言

零宽断言用于匹配某个位置前或后的子串,但不包括在匹配结果中。

import re

pattern = r"\d+(?= dollars)"  # 匹配 "dollars" 前面的数字
string = "I have 100 dollars."

result = re.findall(pattern, string)
print(result)  # Output: ['100']

4. 实例演示

4.1 邮箱验证

使用正则表达式验证输入的字符串是否为有效的邮箱地址。

import re

pattern = r"^\w+@\w+\.\w+$"  # 匹配邮箱地址
email = "[email protected]"

result = re.match(pattern, email)
if result:
    print("Valid email address")
else:
    print("Invalid email address")

4.2 URL提取

从文本中提取所有的URL链接。

import re

pattern = r"http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+"
text = "Visit my website at https://example.com. You can also check out https://example.org."

result = re.findall(pattern, text)
print(result)  # Output: ['https://example.com', 'https://example.org']

4.3 HTML标签提取

从HTML文档中提取所有的标签内容。

import re

pattern = r"<([^>]+)>"  # 匹配HTML标签
html = "<h1>Hello</h1><p>World</p>"

result = re.findall(pattern, html)
print(result)  # Output: ['h1', '/h1', 'p', '/p']

4.4 敏感词过滤

使用正则表达式过滤文本中的敏感词。

import re

sensitive_words = ["bad", "evil", "dangerous"]
text = "This is a bad example."

for word in sensitive_words:
    pattern = fr"\b{re.escape(word)}\b"  # 匹配敏感词并确保单词边界
    text = re.sub(pattern, "***", text)

print(text)  # Output: "This is a *** example."

结论

本文介绍了Python中正则表达式的基础知识和高级用法,包括基本匹配规则、使用re模块进行正则操作的方法以及一些常见的实例演示。掌握正则表达式的技巧和应用,将能够更高效地处理和处理文本数据。希望本文能够对您在Python中使用正则表达式有所帮助。

标签:实用教程,匹配,string,Python,pattern,re,玩转,print,result
From: https://www.cnblogs.com/shiqianlong/p/17546564.html

相关文章

  • python内置os库
    1.目录不存在即创建importosdirs='./file_test/media_test/'ifnotos.path.exists(dirs):#判断文件和文件夹都可以os.makedirs(dirs)ifos.path.isfile("filename.txt"):pass#可只用来判断文件是否存在importosifnotos.path.exists('foldername'......
  • python tk增加菜单项的便捷封装
    TK增加菜单项的编码是比较复杂的,为方便使用,我做了一下封装,用户使用场景:root=tk.Tk()AddMenuItem(root,'File.New.Close',lambda:print('111'))AddMenuItem(root,'File.Hzq',lambda:print('abc'))root.mainloop()实现源码:'''Tk扩展'�......
  • python - 类
    1.类classDog: """一次模拟小狗的简单尝试。""" def__init__(self,name,age):#当根据Dog类创建实例时,python会自动运行__init__()方法。 """初始化属性name和age""" self.name=name#属性。以self.为前缀的变量可供类中所有方......
  • Personal utils in Python
    #-*-coding:utf-8-*-importosimportsysimportshutilfromtimeimportperf_counterfromcollectionsimportdefaultdictfromdatetimeimporttimedeltafromtypingimportSequence,List,Dict,Hashable,Callablefromconfig.commonimportDEBUG#项目......
  • Python抓取音乐音乐
    #encoding=utf8importrequestsfrombs4importBeautifulSoupimporturllib.requestheaders={'Referer':'http://music.163.com/','Host':'music.163.com','User-Agent':'Mozilla/5.0(Wi......
  • 请不要再用被淘汰的Python库了,这几个新的更具优势!
    随着每个Python版本的发布,都会添加新模块,并引入新的更好的做事方式,虽然我们都习惯了使用好的旧Python库和某些做事方式,但现在也时候升级并利用新的和改进的模块及其特性了。Pathlib而不是OSpathlib绝对是Python标准库中最近添加的更大的内容之一,自Python3.4以来,它一......
  • django python manage.py migrate 后报错字段长度超了 django.db.utils.OperationalE
     现象:在models.py将CharField字段的maxlength=修改后,执行ythonmanage.pymigrate 报错django.db.utils.OperationalError:(1118 'Rowsizetoolarge.Themaximumrowsizefortheusedtabletype,notcountingBLOBs,is65535.Thisincludes storageoverhead,c......
  • python 之 mysql8 基础
    一、表操作1、查看当前所在的库>selectdatabase():+------------+|database()|+------------+|oldboy|+------------+2、usedatabase选择库3、查看表>showtables 查看有几个表>showcreatetablestudent; 查看创建表的过程+---------+-----------......
  • 用代码玩转迷你图:手把手教你用编程语言打造简洁易读的数据图表!
    前言迷你图(MiniChart)最早起源于流程图和组织架构图中的一种简化图形,用于表示一个大型数据集合中的趋势和变化。随着数据可视化技术的发展,迷你图也被广泛应用在各种类型的数据图表中,例如折线图、柱形图、散点图等。迷你图通常具有小巧、简洁、直观的特点,能够在有限的空间内有效地展......
  • 使用Python读取图片
    一、Python学习两大道具1.dir()工具作用:支持打开package,看到里面的工具函数示例:(1)输出torch库包含的函数dir(torch)(2)输出torch.AVG函数中的参数dir(torch.AVG)2.help()工具作用:说明书,查看库中函数某个参数的说明或使用方法示例:(1)输出torch库中AVG......