在程序中我们可以使用正则表达式匹配出符合规则的字符串数据。
正则表达式的元字符:
1.匹配单个字符的元字符:
元字符 | 功能 |
. | 匹配一个除 外的任意字符 |
[] | 匹配[]中列举出来的字符,只要在[]中存在则匹配成功 |
d | 匹配数字,即0-9 |
D | 匹配非数字,即除0-9之外的所有字符 |
s | 匹配空白,即空格、 、 (回到当前行的行首)、f(分页符)、 |
S | 匹配非空白字符 |
w | 匹配非特殊字符,即0-9、a-z、A-Z,_和汉字 |
W | 匹配特殊字符,除0-9、a-z、A-Z,_和汉字外的字符 |
匹配字符串中空格后的第一个非特殊含义的字符 |
2.匹配多个字符的限定符:
限定符 | 功能 |
* | 匹配任意一个出现0次或多次的字符 |
+ | 匹配任意一个出现一次或多次的字符,即至少出现1次的字符 |
? | 匹配一个出现1次或0次的字符 |
{m} | 匹配一个出现m次的字符 |
{m,} | 匹配一个至少出现m次的字符 |
{m,n} | 匹配一个出现次数在m到n之间的字符 |
3.匹配开头和结尾的元字符:
元字符 | 功能 |
^ | 匹配以指定字符串开头的字符串 |
$ | 匹配以指定字符串结尾的字符串 |
4.匹配分组的元字符:
元字符 | 功能 |
| | 匹配满足|左右两边的任意一个表达式的字符串 |
() | 将括号中的字符作为一个分组 |
um | 通过num引用分组,分组顺序从第一个左括号开始为1,依次递增 |
(?P<name>) | 给分组起一个别名 |
(?P=name) | 通过别名引用分组 |
5.正则表达式的高阶函数:
方法 | 功能 |
match() | 从头开始匹配符合规则的字符串 |
search() | 查找第一个符合匹配规则的子串 |
findall() | 查找出所有符合匹配规则的子串 |
split() | 将字符串以指定的匹配规则进行分割, 并返回一个分割后的列表 |
sub() | 通过匹配规则找到字符串中符合规则的子串, 并将子串替换成指定的新字符串 |
6.正则表达式高阶函数的应用:
1.match()函数从头开始匹配,如果第一个字符不符合规则那么久匹配不到数据,
代码如下:
import re
print(re.match(r'd.', '123124512').group())
print(re.match(r'd*', '123124512').group())
print(re.match(r'd+', '12312').group())
print(re.match(r'D+', '```12312').group())
print(re.match(r'w+', '```12312'))
print(re.match(r'W+', '```12312').group())
2.search()函数从头开始查找出第一个符合规则的子串,
代码如下:
print(re.search(r'[a-zA-Z]+', '1abc2ABC').group())
print(re.search(r'[a-zA-Z]{3}', '1abc2ABC').group())
3.findall()函数从头开始找出所有符合规则的子串,
代码如下:
print(re.findall(r'[a-zA-Z]+', '1abc2ABC3def4DEF'))
4.split()函数将字符串以指定规则进行分割,
代码如下:
print(re.split(r':|.', 'http://www.baidu.com'))
5.sub()函数匹配字符串中符合规则的子串并使用新的字符串进行替换,
代码如下:
print(re.sub(r'[A-D]+', '你好啊', '1anbc2ADC3456'))