正则表达式:
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*)>.*\1>\2>",html_str) # 引用分组num匹配到的字符串
re.match(r"<(?P\w*)><(?P\w*)>.*(?P=p1)>?P=p2>",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"): # 可以调用函数,对匹配到的值进行计算