Python--re模块

1. Python正则表达式简介

Python是一种强大的编程语言,具有卓越的文本处理能力。其中,正则表达式是一种表达文本模式的方法,旨在匹配、查找、代替特定模式的文本。Python内置的re模块提供了正则表达式支持,是Python文本处理的重要组成部分。

1.1 re模块的主要功能

re模块支持以下主要功能:

标准匹配:基于文本模式匹配,寻找字符串中的特定模式。

搜索和替代:查找并代替字符串中的特定模式。

分割:基于特定模式分割字符串。

组:使用括号将部分模式组合成子组,并对其进行分组匹配。

反斜杠功能:反斜杠可以进行特殊字符的转义。

贪婪匹配:尽可能匹配更多字符,非贪婪匹配则尽可能匹配更少字符。

1.2 基本语法规则

Python正则表达式遵循一系列基本语法规则,包括:

普通字符(如字母、数字、符号):根据普通字符进行匹配。

特殊字符(如反斜杠、圆括号、星号):具有特殊含义,常用于匹配特定模式。

匹配模式(如re.I、re.M):用于修改正则表达式的匹配方式。

2. re模块常用函数

2.1 re.match

re.match()用于从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()函数就会返回None。

import re

pattern = '^hello'

string = 'hello world'

result = re.match(pattern, string)

print(result)

该代码的输出结果为:

<re.Match object; span=(0, 5), match='hello'>

该函数返回值是一个匹配对象,包含了匹配的结果。其中,span表示匹配的起止位置,match表示匹配的字符串。

2.2 re.search

re.search()函数用于在字符串中搜索匹配正则表达式的第一个位置。如果匹配成功,函数返回一个匹配的对象;否则,返回None。

import re

pattern = 'world$'

string = 'hello world'

result = re.search(pattern, string)

print(result)

该代码的输出结果为:

<re.Match object; span=(6, 11), match='world'>

该函数返回值包含匹配的结果,与re.match()不同的是,re.search()是针对整个字符串进行匹配,而不单独匹配起始位置。

2.3 re.findall

re.findall()函数用于在字符串中查找匹配正则表达式的所有子串,并以列表形式返回结果。

import re

pattern = '\d+'

string = 'there are 3 apples and 4 pears'

result = re.findall(pattern, string)

print(result)

该代码的输出结果为:

['3', '4']

该函数返回值为一个列表,其中每个元素都是匹配的子串。

2.4 re.sub

re.sub()函数用于在字符串中查找匹配正则表达式的所有子串,并将其替换为指定的字符串。

import re

pattern = '\d+'

string = 'there are 3 apples and 4 pears'

result = re.sub(pattern, '5', string)

print(result)

该代码的输出结果为:

there are 5 apples and 5 pears

该函数返回值为替换后的字符串。

3. 一些示例

3.1 匹配邮箱

以下代码使用正则表达式匹配邮箱,其中的re.compile()函数用于预编译正则表达式。

import re

pattern = re.compile(r'\w+@\w+\.\w{3}')

string = 'my email is abc123@qq.com'

result = re.search(pattern, string)

print(result.group())

该代码的输出结果为:

abc123@qq.com

该正则表达式中,\w+表示匹配至少一个字母、数字或下划线,@表示匹配一个@符号,\w+表示匹配至少一个字母、数字或下划线,\.表示匹配一个点号,\w{3}表示匹配三个字母、数字或下划线。

3.2 匹配IP地址

以下代码使用正则表达式匹配IP地址。

import re

pattern = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')

string = 'my ip address is 192.168.1.1'

result = re.search(pattern, string)

print(result.group())

该代码的输出结果为:

192.168.1.1

该正则表达式中,\d{1,3}表示匹配1到3个数字,\.表示匹配一个点号。

3.3 匹配HTML标签

以下代码使用正则表达式匹配HTML标签,其中re.S模式表示匹配包含换行符的字符串。

import re

pattern = re.compile(r'<\w+>(.*?)', re.S)

string = '

Hello World!
'

result = re.search(pattern, string)

print(result.group(1))

该代码的输出结果为:

Hello World!

该正则表达式中,<\w+>表示匹配任意一个HTML标签起始符,.*?表示匹配任意内容,?表示非贪婪匹配,表示匹配任意一个HTML标签结束符。

4. 总结

本篇文章介绍了Python re模块的基本功能和常用函数,以及使用正则表达式实现常见任务的示例。

正则表达式虽然功能强大,但也存在一些限制和注意事项。例如,正则表达式不适用于处理嵌套结构和递归结构,应尽量使用HTML解析器、XML解析器等专业工具;另外,正则表达式的匹配模式也需要根据实际情况选择。

上一篇:python--列表,元组

下一篇:python--集合

后端开发标签