正则表达式
基础知识
-
模块导入
import re
-
获取指定字符串中与正则表达式匹配的对象,并打印
result = re.match(正则表达式,字符串)
result.group()
单字符匹配
字符 | 功能 |
---|---|
. | 匹配任意1个字符(除了\n) |
[] | 匹配[]中列举的字符 |
\d | 匹配数字,即0-9 |
\D | 匹配非数字,即不是数字 |
\s | 匹配空白字,即空格、tab键、\n |
\S | 匹配非空白 |
\w | 匹配单字符,即a-z、A-Z、0-9、_(包括汉字等其它语言) |
\W | 匹配非单字符 |
多个字符匹配
字符 | 功能 |
---|---|
* | 匹配前一个字符出现0次或者无限次,即可有可无 |
+ | 匹配前一个字符出现1次或者无限次,即至少1次 |
? | 匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
{m} | 匹配前一个字符出现m次 |
{m,n} | 匹配前一个字符出现m到n次 |
注意
如果需要
.*
匹配\n
,则
html_content = """
fsdfa
dfafff
dfaf
"""
re.match(r".*", html_content, re.S).group()
匹配开头结尾
字符 | 功能 |
---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
匹配分組
字符 | 功能 |
---|---|
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个分组 |
\num | 引用分组num匹配到的字符串 |
(?P<name>) | 分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
示例
示例1
判断变量名是否符合python变量命名规范
示例2
匹配出163的邮箱地址,且@符号之前有4到20位的英文字母、数字或下划线组成
re模块的高级用法
search
返回第一个与之匹配部分的对象
ret = re.search(r"\d+", "观看数: 99999")
ret.group()
match
从头开始匹配,返回与之匹配部分的对象,与
search
的区别:
search
是全文搜索直到搜索到第一与之匹配的match
则是从头开始匹配
findall
返回所有匹配的字符的列表
re.findall(r"\d+", "python = 999, c = 333, c++ = 123")
返回['999', '333', '123']
sub
替换匹配的内容(多处),然后重新返回字符串
re.sub(r"\d+", '998', "python 培训费 = 1000 )
返回:
python 培训费 = 998
如果中间(替换内容)是一个函数,那么匹配出来的对象会被当做函数的参数传递给函数,然后再用函数返回的结果的替换匹配的内容。
def add(temp):
str_num = temp.group()
num = int(str_num) + 1
return str(num)
ret = re.sub(r"\d+", add, "python = 1000")
print(ret)
返回:python = 1001
split
根据匹配的内容切割字符串,返回一个列表
re.split(r":|,", "Name: Sam, 男, 帅")
返回['Name', 'Sam', '男', '帅']