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+>(.*?)\w+>', re.S)
string = '
Hello World!'
result = re.search(pattern, string)
print(result.group(1))
该代码的输出结果为:
Hello World!
该正则表达式中,<\w+>表示匹配任意一个HTML标签起始符,.*?表示匹配任意内容,?表示非贪婪匹配,\w+>表示匹配任意一个HTML标签结束符。
4. 总结
本篇文章介绍了Python re模块的基本功能和常用函数,以及使用正则表达式实现常见任务的示例。
正则表达式虽然功能强大,但也存在一些限制和注意事项。例如,正则表达式不适用于处理嵌套结构和递归结构,应尽量使用HTML解析器、XML解析器等专业工具;另外,正则表达式的匹配模式也需要根据实际情况选择。