python 笔记 04 — web服务器相关知识


正则表达式:

re.match的用法

示例:

# -*- coding: utf-8 -*-
import re

# re.match(正则表达式,待提取的字符串)
result = re.match(r"[Hh]ello", "hello world")

# 用group方法提取匹配到的数据
a = result.group()
print(a)
匹配单个字符常用项
字符 功能
. 匹配任意1个字符(除了\n)
[] 匹配[]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即空格,tab键
\S 匹配非空白
\w 匹配单词字符,即a-z,A-Z,0-9
\W 匹配非单词字符
匹配多个字符常用项
字符 功能
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有一次
匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m} 匹配前一个字符出现m次
{m,n} 匹配前一个字符出现从m到n次
开头结尾
字符  功能
^   匹配字符串开头
$  匹配字符串结尾

 # 举例

re.match(r"\d{3,4}-?\d{8}","025-12345678") #大括号里3,4,表示可以有3-4位;?号前的字符可以有也可以没有
re.match(
r"^[a-zA-Z_][a-zA-Z_]#$","a#123") # ^ python里会默认从正则表达式开头匹配,可省略其他语言不一定;#匹配前面的规则无论多少位数,$匹配到的最终位是这个字符串的结尾最后一位
# 匹配4-20位的邮箱号
re.match(r"^[0-9a-zA-Z]{4,20}@[0-9a-zA-Z]+\.com$", "h332@qq.com") 
result = re.match(r"^[0-9a-zA-Z]{4,20}@(163|126|qq)\.com$", "h332@qq.com")
result.group(1) # 取小括号扩起来的第一个数
匹配分组
字符  功能
| 匹配左右任意一个表达式
(ab) 将括号中字符串作为一个分组
\num 引用分组num匹配到的字符串
(?P) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串
html_str="

hahahaha

" re.match(r"<(\w*)><(\w*)>.*",html_str) # 引用分组num匹配到的字符串
re.match(r"<(?P\w*)><(?P\w*)>.*",html_str) # 引用分组num匹配到的字符串

re其他常用方法:

re.search(r"\d+","点赞数:999,阅读量:666")   # 查询

re.findall(r"\d+",'python=998,c=7890,c++=12345') #返回是个列表

re.sub(r"\d+","998","python=997,c++=900"): # 置换

add(temp):
    strNum=temp.group()
    num=int(strNum)+1
    return str(num)
re.sub(r"\d+",add,"python=997,c++=900"): # 可以调用函数,对匹配到的值进行计算

相关