Python正则表达式知识点
正则表达式是由一些特殊字符和普通字符组合而成的模式,用于匹配字符串。在Python中,我们可以使用re模块来处理正则表达式。本文将从以下几个方面介绍Python正则表达式的知识点。
1. 正则表达式的基本语法
正则表达式由普通字符和特殊字符组成。普通字符表示它们本身,特殊字符则具有特殊的含义。
1.1 普通字符
普通字符就是表示它们本身的字符,例如数字、字母、空格、标点符号等等。在正则表达式中,普通字符只表示它们本身,不具有任何特殊含义。
下面是一个匹配手机号码的正则表达式:
import re
pattern = '\d{11}' # 匹配11位数字
text = '我的电话号码是13912345678'
result = re.findall(pattern, text)
print(result) # ['13912345678']
在这个例子中,我们通过使用普通字符\d来表示数字,使用字符{11}来表示11次匹配,从而得到了一个匹配手机号码的正则表达式。
1.2 特殊字符
特殊字符在正则表达式中具有特殊的含义。下面是几个常用的特殊字符:
- .:匹配任意一个字符,除了换行符\n;
- ^:匹配字符串的开头;
- $:匹配字符串的结尾;
- *:匹配前面的字符重复出现 0 次或者多次;
- +:匹配前面的字符重复出现 1 次或者多次;
- ?:匹配前面的字符重复出现 0 次或者 1 次;
- \:转义字符,用于匹配特殊字符本身。
下面是一个匹配邮箱的正则表达式:
import re
pattern = '\w+@[0-9a-z]+\.[a-z]{2,3}'
text = '我的邮箱是abc123@qq.com'
result = re.findall(pattern, text)
print(result) # ['abc123@qq.com']
在这个例子中,我们使用特殊字符\w来匹配单词字符(包括数字和字母),使用特殊字符+来表示重复出现 1 次或者多次,使用特殊字符@来匹配邮箱中的@符号,使用特殊字符[0-9a-z]来匹配数字和字母,使用特殊字符\.来匹配邮箱中的.符号,使用特殊字符{2,3}指定匹配2到3次的小写字母,从而得到了一个匹配邮箱的正则表达式。
2. re模块常用函数
在Python中,我们可以使用re模块来处理正则表达式。下面是re模块常用的函数。
2.1 re.findall()
re.findall()函数可以用来找出所有符合正则表达式的字符串。它的返回值是一个列表。
下面是一个使用re.findall()函数的例子:
import re
pattern = '\d+'
text = 'abc 123 def 456'
result = re.findall(pattern, text)
print(result) # ['123', '456']
在这个例子中,我们使用正则表达式\d+来匹配数字,使用re.findall()函数来找出字符串中所有的数字。
2.2 re.search()
re.search()函数可以用来找出第一个符合正则表达式的字符串。它的返回值是一个match对象,包含了匹配结果的相关信息。
下面是一个使用re.search()函数的例子:
import re
pattern = 'hello'
text = 'world hello'
result = re.search(pattern, text)
print(result) #
print(result.group()) # hello
在这个例子中,我们使用字符串hello来匹配文本中的单词hello,并使用re.search()函数找出第一个匹配结果。
2.3 re.sub()
re.sub()函数可以用来替换符合正则表达式的字符串。它的返回值是替换后的字符串。
下面是一个使用re.sub()函数的例子:
import re
pattern = 'world'
text = 'hello world'
new_text = re.sub(pattern, 'Python', text)
print(new_text) # hello Python
在这个例子中,我们使用字符串world来匹配文本中的单词world,并使用re.sub()函数将其替换为Python。
3. 正则表达式的高级应用
在正则表达式的高级应用中,我们会介绍一些可以更加灵活使用正则表达式的技巧。
3.1 使用分组
正则表达式中的分组要用小括号()来表示。使用分组可以让我们更加灵活地进行匹配和替换。
下面是一个使用分组的例子:
import re
pattern = '(\d{3})-(\d{4}-\d{4})'
text = '我的电话号码是010-1234-5678'
result = re.findall(pattern, text)
print(result) # [('010', '1234-5678')]
在这个例子中,我们使用分组来匹配电话号码。其中第一个小括号表示区号,第二个小括号表示电话号码,使用-符号分隔。使用re.findall()函数来找到所有符合正则表达式的字符串,返回值是一个元组类型的列表。可以通过下标来访问每个分组的结果。
3.2 使用元字符
元字符是可以帮助我们更加灵活地使用正则表达式的特殊字符。
下面是一些常用的元字符:
- \d:匹配数字,相当于[0-9];
- \D:匹配非数字,相当于[^0-9];
- \s:匹配空白字符,包括空格、制表符、换行符等;
- \S:匹配非空白字符;
- \w:匹配单词字符,相当于[a-zA-Z0-9_];
- \W:匹配非单词字符,相当于[^a-zA-Z0-9_]。
下面是一个使用元字符的例子:
import re
pattern = '\d+\.\d+'
text = '3.14'
result = re.match(pattern, text)
print(result) #
在这个例子中,我们使用元字符+来匹配前面的\d重复出现 1 次或者多次,使用元字符\.来匹配小数点,得到了一个能够匹配小数的正则表达式。
4. 小结
本文介绍了Python正则表达式基本语法、re模块常用函数以及正则表达式的高级应用。正则表达式可以帮助我们更加灵活地处理字符串,是Python程序开发中不可缺少的技能。