day19 python之re模块正则练习

1、匹配标签

import re
ret = re.search("<(?P\w+)>\w+", "

hello

") # 可以再分组中利用 ?P 的形式给分组起名字,后面的 ?P=tag_name 是引用前面的分组 # 获取的匹配结果可以直接用 group('name') 拿到对应的值 print(ret.group('tag_name')) # 结果:h1 print(ret.group()) # 结果:

hello

ret = re.search(r"<(\w+)>\w+","

hello

") # 如果不给组起名字,也可以用 \序号 来找到对应的组,表示要找的内容和前面的组内容一致 # 获取的匹配结果可以直接用 group(序号) 拿到对应的值 print(ret.group(1)) # 结果:h1 print(ret.group()) # 结果:

hello

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字符串可以是多行的,忽略空白字符,并可以添加注释

 

转载于:https://www.cnblogs.com/87pzy/p/10631547.html

你可能感兴趣的:(day19 python之re模块正则练习)