分组在re模块中的使用
import re #search s = "<a>wahaha</a>" #标签语言 html 和 web相关 ret= re.search("(>)(\w+)(<)",s) print(ret.group()) #>wahaha< 和print(ret.group(0))结果一样 print(ret.group(1)) #> 数字参数代表取对应分组中的内容 print(ret.group(2)) #wahaha print(ret.group(3)) #< # search分组 通过数字显示 # findall # 为了findall可以顺利取到分组中的内容,有一种特殊的语法,就是优先显示分组内容 ret= re.findall(">\w+<",s) print(ret) #['>wahaha<'] ret= re.findall(">(\w+)<",s) #加括号会优先显示(\w+)的内容,两边的> < 就不显示了 print(ret) #['wahaha'] # 取消分组优先(?: 正则表达式) ret= re.findall("\d+(\.\d+)?", "1.234.5.678") print(ret) #['.234', '.678'] python把正则中的括号当成了优先分组,所以取出来的是小数点之后的, # 因为正则规则用了()规定小数,所以函数会当成优先级执行 ret2= re.findall("\d+(?:\.\d+)?", "1.234.5.678") #在括号中加上?: 可以取消优先级 print(ret2) #['1.234', '5.678'] #split #没有分组的时候会把切掉的内容不显示,加上分组会一起显示出来 ret = re.split("\d+","alex29egon30") print(ret) #['alex', 'egon', ''] ret = re.split("(\d+)","alex29egon30") print(ret) #['alex', '29', 'egon', '30', ''] #分组命名 (?P<这个组的名字>正则表达式) s = '<a>wahaha</a>' ret = re.search('>(?P<name>\w+)<',s)#把想取出来的wahaha单独括起来了,并且加了 ?P 和一个名字 (name) print(ret.group()) #>wahaha< print(ret.group(1)) #wahaha 因为就一个分组,所以直接取wahaha print(ret.group('name')) #wahaha 也可以通过组名取值 s = '<a>wahaha</a>' pattern = '<(\w+)>(\w+)</(\w+)>' ret = re.search(pattern,s) print(ret.group(1) == ret.group(3)) # True 判断前后两个标签名 a a 字是否一致 s = '<a>wahaha</A>' pattern = '<(\w+)>(\w+)</(\w+)>' ret = re.search(pattern,s) print(ret.group(1) == ret.group(3)) # False 判断前后两个标签名 a A 字是否一致
# 使用前面的分组 要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致 s = '<a>wahaha</A>' pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>' ret = re.search(pattern,s) print(ret) #None 前后分组的名字不一致, 返回None s = '<a>wahaha</a>' pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>' #要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致 ret = re.search(pattern,s) print(ret.group(2))
s = '<a>wahaha</a>'
pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>' #要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
ret = re.findall(pattern,s)
print(ret) #[('a', 'wahaha')]
s = '<a>wahaha</a>'
pattern = r'<(\w+)>(\w+)</(\1)>' #\1 直接表示了第一个()里的内容, 这个没有tab,没有组名,直接用数字表达了,但是需要在字符串前加上一个r, 对\1转义
ret = re.findall(pattern,s)
print(ret) #[('a', 'wahaha', 'a')]
# 这些情况会用到
# 2018-12-06
# 2018.12.6
# 2018 12 06
# 12:30:30