1、匹配标签
import re ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>", "<h1>hello</h1>") # 可以再分组中利用 ?P<name> 的形式给分组起名字,后面的 ?P=tag_name 是引用前面的分组 # 获取的匹配结果可以直接用 group('name') 拿到对应的值 print(ret.group('tag_name')) # 结果:h1 print(ret.group()) # 结果:<h1>hello</h1> ret = re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>") # 如果不给组起名字,也可以用 \序号 来找到对应的组,表示要找的内容和前面的组内容一致 # 获取的匹配结果可以直接用 group(序号) 拿到对应的值 print(ret.group(1)) # 结果:h1 print(ret.group()) # 结果:<h1>hello</h1>
2、匹配整数
import re ret = re.findall(r"\d+", "1-2*(60+(-40.35/5)-(-4*3))") print(ret) # 结果:['1', '2', '60', '40', '35', '5', '4', '3'] ret = re.findall(r"-?\d+\.\d*|(?:-?\d+)", "1-2*(60+(-40.35/5)-(-4*3))") print(ret) # 结果:['1', '-2', '60', '-40.35', '5', '-4', '3'] ret = re.findall(r"-?\d+\.\d*|(-?\d+)", "1-2*(60+(-40.35/5)-(-4*3))") # 分组优先 print(ret) # 结果:['1', '-2', '60', '', '5', '-4', '3'] ret.remove("") print(ret) # 结果:['1', '-2', '60', '5', '-4', '3']
3、数字匹配
# 1、 匹配一段文本中的每行的邮箱 s = 'http://blog.csdn.net/make164492212/article/details/51656638' ret = re.search(r"\w+.\w+.\w+",s) print(ret.group()) # blog.csdn.net # 2、 匹配一段文本中的每行的时间字符串,比如:‘1990-07-12’; # # 分别取出1年的12个月(^(0?[1-9]|1[0-2])$)、 # 一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ # # 3、 匹配qq号。(腾讯QQ号从10000开始) [1,9][0,9]{4,} # # 4、 匹配一个浮点数。 ^(-?\d+)(\.\d+)?$ 或者 -?\d+\.?\d* # # 5、 匹配汉字。 ^[\u4e00-\u9fa5]{0,}$ # # 6、 匹配出所有整数
4、flag
flags有很多可选值: re.I(IGNORECASE)忽略大小写,括号内是完整的写法 re.M(MULTILINE)多行模式,改变^和$的行为 re.S(DOTALL)点可以匹配任意字符,包括换行符 re.L(LOCALE)做本地化识别的匹配,表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境,不推荐使用 re.U(UNICODE) 使用\w \W \s \S \d \D使用取决于unicode定义的字符属性。在python3中默认使用该flag re.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并可以添加注释