re模块与正则表达式进阶

在python中使用正则表达式:

 转义符:\
 re模块:

import  re

1.findall  :返回所有满足匹配条件的结果,放在列表里,如果没救就返回空列表,在分组中会优先显示分组中的内容,想要取消优先分组可以(?:正则表达式)

ret = re.findall("\d","axd4515d4f")

print(ret)

2.search  :找到第一个符合要求的字符串,然后返回一个包含匹配信息的对象,可以通过goup()方法得到匹配的字符串,如果没有就返回None.  re.match()和search一样,只是在第一位没找到时就会报错

如果search中有分组的话,通过group(n)就能拿到group中的匹配内容

ret = re.search("a","eva egon yuan")

print(ret.group())#结果"a"

3.split  :对字符串进行分割,遇到分组会将分组内被切掉的内容保留.

ret = re.split("[ab]","abcd")#先以"a"分割得到" "和"bcd",然后以b分割得到[" "," ","cd"]

4.sub  :替换,相当于replace.

ret = re.sub("\d","H","eva3erdgs4yuan4",1)#表示将数字换成H,后面的参数表示只替换一次.
5.subn  :返回的是元组(替换的结果,替换的次数)

6.compile  :将正则表达式编译成一个正则表达式对象,方便后面程序调用.

rs = re.compile("正则表达式")

ret = rs.findall("字符串")

7.finditer  :返回一个存放匹配结果的迭代器.

ret = re.finditer("\d","ds3sy4784a")

for i in ret:

  print(i.goup())

 

匹配标签:

 1 import re
 2 
 3 
 4 ret = re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>")
 5 #还可以在分组中利用?<name>的形式给分组起名字
 6 #获取的匹配结果可以直接用group('名字')拿到对应的值
 7 print(ret.group('tag_name'))  #结果 :h1
 8 print(ret.group())  #结果 :<h1>hello</h1>
 9 
10 ret = re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>")
11 #如果不给组起名字,也可以用\序号来找到对应的组,表示要找的内容和前面的组内容一致
12 #获取的匹配结果可以直接用group(序号)拿到对应的值
13 print(ret.group(1))
14 print(ret.group())  #结果 :<h1>hello</h1>

数字匹配:

1、 匹配一段文本中的每行的邮箱
       http://blog.csdn.net/make164492212/article/details/51656638
 
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、 匹配出所有整数

 

posted @ 2018-08-07 15:54  夏天的风在吹  阅读(93)  评论(0编辑  收藏  举报