1,特殊字符^,$,.,*
import re
str = "zhaoheng"
^ 匹配字符串的开头,.匹配任意字符
*匹配0次或多次,$匹配字符串的结尾,+至少匹配一次
#表示,匹配以z开头的,中间任意字符,后面以g结尾的
reg_str = "^z.*g$"
if re.match(reg_str,str):
print("yes")
2,非贪婪匹配之?
import re
str = "zhoooohheng"
#想将两个h之间的拿出来,即 hoooooh,但是拿出来的是hh
#贪婪匹配,是反向匹配的,一直往后找
reg_str = ".*(h.*h).*"#用括号括起来提取子串
match_obj = re.match(reg_str,str)
if match_obj:
print(match_obj.group(1))
?匹配0次或一次
让它变成非贪婪匹配,即从左边开始
reg_str = ".*?(h.*?h).*" *?重复任意次,但尽可能少重复
#第二个?也必须加,否则第二个是从右边来的
3,{2},{2,},{2,4}
{2}出现两次
{2,4}最少2次,最多4次
4, | 或
import re
str = "zhaoheng"
#首先是以最外层的括号为顺序
reg_str = "((wang|zhao)heng)"
match_obj = re.match(reg_str,str)
if match_obj:
print(match_obj.group(1))
5,中括号
(1)[]匹配括号里的任意字符
(2)可以写成区间
import re
str = "15536397338"
reg_str = "(1[583][0-9]{9})"
match_obj = re.match(reg_str,str)
if match_obj:
print(match_obj.group(1))
(3)匹配不在字符中的任意单一字符 [^]
(4)进入中括号里的字符不再有特殊含义
6,\s ,\S ,\w , \W
\s 匹配空白符
eg: "你\s好"==="你 好"
\S匹配非空白字符
\w任意字符,包括字母,数字,下划线
\w ==[A-Za-z0-9]
\w非任意字符,包括字母,数字,下划线
7,[\4E00-\u9FA5]表示汉字
import re
str = " study in 中北大学"
#注意非贪婪匹配
reg_str = ".*?([\4E00-\u9FA5]+大学)"
match_obj = re.match(reg_str,str)
if match_obj:
print(match_obj.group(1))
8,\d匹配数字
import re
str = " 出生于2001年"
#reg_str = ".*?(\d+)"
reg_str = ".*(\d{4})"
match_obj = re.match(reg_str,str)
if match_obj:
print(match_obj.group(1))
9,例子
import re
str = " 出生于2001年6月1日"
str1 = " 出生于2001/6/1"
str2 = " 出生于2001-6-1"
str3= " 出生于2001-06-01"
str4 = " 出生于2001-6"
reg_str = ".*(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}|$))"
match_obj = re.match(reg_str,str)
if match_obj:
print(match_obj.group(1))