Python的re模块

#预备知识点
#正则表达式regex
#特殊符号和字符 ---> 元字符

正则表达式基础知识
通配符 含义 正则示例 匹配结果
reg1 | reg2 匹配正则表达式reg1或reg2 foo | bar foo
. 匹配任何字符(\n除外) a.a abc
^ 匹配字符串起始部分 ^a ab....
$ 匹配字符串终止部分 .txt$ a.txt
* 匹配0次或者多次前面出现的正则表达式 a* aaaaa
+ 匹配1次或者多次前面出现的正则表达式 [a-z]+ aasx
? 匹配0次或者1次前面出现的正则表达式 first? first
{N} 匹配N次前面出现的正则表达式 *.c{2} first.c abc.c
{M,N} 匹配M~N次前面出现的正则表达式 *.c{0,1} one.c
[...] 匹配来自字符集的任意单个字符 [abc] b
[...x-y...] 匹配x~y范围中的任意单个字符 [0-9] 9
[^...] 不匹配次字符集中任意单个字符 [^0-9] a
(*|+|?|{})? 匹配上面频繁出现符号的非贪婪版 (*|+|?|{})? ({})
(...) 匹配封闭的正则表达式,然后另存为子组 ([0-1][0-9])? 12
\d 匹配任何十进制数字 \d.txt 1.txt
\w 匹配任何字母数字字符 \w{2}txt 1.txt
\s 匹配任何空格字符 a\sb a b
\b 匹配任何单词边界 The\bdog The dog
\N 匹配已保存的子组 ([0-9])\1 1
\. 匹配"."这个字符 a\.txt a.txt
常用正则表达式
正则表达式 描述 匹配结果
\d+(\.\d*)? 任意整数和浮点数 0.004 2 75.
\b[^\Wa-z0-9_][^\WA-Z0-9_]*\b 首字母只能大写 Boo Foo
^http:\/\/([\w-]+(\.[\w-]+)+(\/[\w-.\/\?%&=\u4e00-\u9fa5]*)?)?$ 验证网址 http://www.baidu.com/?id=1
^[\u4e00-\u9fa5]{0,}$ 验证汉字 汉字汉字
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 验证电子邮件 example@163.com
^[1-9]([0-9]{16}|[0-9]{13})[xX0-9]$ 验证身份证 14525419951215445X
^13[0-9]{1}[0-9]{8}|^15[9]{1}[0-9]{8} 验证手机号 138459572***
^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$ 验证IP 192.168.1.1
^[a-zA-Z0-9]+([a-zA-Z0-9\-\.]+)?\.s|)$ 验证域名 baidu.com
^([a-zA-Z]\:|\\)\\([^\\]+\\)*[^\/:*?"<>|]+\.txt(l)?$ 验证文件路径 C:\user\wo
<(.*)>(.*)<\/(.*)>|<(.*)\/> HTML标签匹配 xxxx

#re模块
#常用的方法
compile(pattern, flags = 0)        匹配任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象
match(pattern, string, flags = 0)     使用带有可选标记的正则表达式的模式来匹配字符串。如果匹配成功,返回匹配对象,否则返回None
search(pattern, string ,flags = 0)     使用可选标记搜索字符串中第一次出现的正则表达式模式。如果匹配成功,则返回匹配对象,否则返回None
findall(pattern, string[,flags] )          查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表
finditer(pattern, string[,flags] )        与findall()相同,但返回的是一个迭代器。对于每一次匹配,迭代器都能返回一个匹配对象
split(pattern, string, max = 0)         根据正则表达式的模式分隔符,split函数将字符串分割为列表,返回匹配列表,分割最多操作max次
group(num = 0)               返回整个匹配对象,或者编号为num的特定子组

  1. import re
  2. m = re.search('foo','asdasdfooasd')
  3. #这里如果使用match将匹配不到任何字符串,因为match从第一个a开始匹配
  4. if m is not None:
  5. print(m.group())
  1. regex = <(.*)>(.*)<\/(.*)>|<(.*)\/>
  2. m = re.search(regex,"aa<a>aaaa</a>")
  3. #一样只有search能匹配到标签
  4. if m is not None:
  5. print(m.group())
  1. regex = '(foo\w)(\w)'
  2. m = re.match(r'(foo\w)(\w)','fooasdfooasd')
  3. if m is not None:
  4. print(m.group(1))
  5. print(m.groups())
  6. #输出
  7. #fooa
  8. #('fooa', 's')
  1. regex = 'apple'
  2. m = re.findall(regex,'apple1 apple2 apple3')
  3. print(m)
  4. #输出
  5. #['apple', 'apple', 'apple']
  1. regex = 'apple'
  2. m = [ g.group() for g in re.finditer(regex,'apple1 apple2 apple3')]
  3. print(m)
  4. #输出
  5. #['apple', 'apple', 'apple']
  1. list = [
  2. 'aaa, bbb ccc',
  3. 'ddd, eee fff',
  4. ]
  5. for i in list:
  6. print(re.split(', |(?= (?:[a-z]{3})) ',i))
  7. #输出
  8. #['aaa', 'bbb', 'ccc']
  9. #['ddd', 'eee', 'fff']

re模块小实例:

  1. __author__ = 'cq'
  2.  
  3. import re
  4. from random import randrange,choice,randint
  5. from string import ascii_lowercase as lc
  6. from time import ctime
  7.  
  8. #生成数据文件
  9. def generate_data():
  10. with open('./data.txt','w') as f:
  11. for i in range(randint(20,30)):
  12. tlds = ('com', 'edu', 'net', 'org', 'gov')
  13. dtint = randint(100000000,1200000000) #生成时间戳
  14. dtstr = ctime(dtint) #将时间戳转化为特定时间格式
  15. llen = randrange(4, 8) #用户名长度
  16. login = ''.join(choice(lc) for i in range(llen)) #生成用户名
  17. dlen = randrange(llen,13) #域名长度
  18. dom = ''.join(choice(lc) for i in range(dlen)) #生成域名
  19.  
  20. data_line = "%s::%s@%s.%s::%d-%d-%d\n" % (dtstr, login, dom, choice(tlds), dtint, llen, dlen)
  21. f.write(data_line) #写入文件
  22. print(data_line) #打印每行记录
  23.  
  24. #匹配指定日期的行
  25. def match_date():
  26. regex = '(Mon|Tue|Wed|Thu|Fri|Sat|Sun)(.*)'
  27. with open('./data.txt','r') as f:
  28. m = re.findall(regex,f.read())
  29. for i in m:
  30. print(i)
  31.  
  32. #匹配在某时间段内的记录
  33. def match_time_slot():
  34. regex = ' ([0-9]{1,2}) .*([0-9]{4})::(.*)'
  35. # regex = ' ([0-9]{0,2}).*(::)(.*) '
  36. with open('./data.txt','r') as f:
  37. m = re.findall(regex,f.read())
  38. for i in m:
  39. if 2000 <= int(i[1]) and int(i[1]) <= 2020 and 20 <= int(i[0]) and int(i[0]) <= 31:
  40. print(i)
  41.  
  42. #匹配某名单中人员的记录
  43. def match_name():
  44. regex = '::([a-z]{2,13})@([a-z]{2,13})\.(com|edu|net|org|gov)'
  45. with open('./data.txt','r') as f:
  46. m = re.findall(regex,f.read())
  47. for i in m:
  48. print(i)
  49.  
  50. def main():
  51. generate_data()
  52. print("\n---------------match_date--------------------\n")
  53. match_date()
  54. print("\n---------------match_time_slot--------------------\n")
  55. match_time_slot()
  56. print("\n---------------match_name--------------------\n")
  57. match_name()
  58.  
  59. if '__main__' == __name__:
  60. main()
输出结果
  1. Sun Mar 5 00:55:55 1989::qvnc@ygeowwaf.com::605033755-4-8
  2.  
  3. Mon Oct 17 17:16:31 2005::yene@rtewqvvyfe.edu::1129540591-4-10
  4.  
  5. Tue Oct 7 06:33:30 2003::wlyi@coagmnososzy.edu::1065479610-4-12
  6.  
  7. Mon Oct 16 00:01:06 2006::zsgok@jkpiplcm.edu::1160928066-5-8
  8.  
  9. Wed Mar 15 06:37:35 2000::paok@anpekysphicu.com::953073455-4-12
  10.  
  11. Wed Mar 26 12:27:25 1980::bodqoe@iydohek.org::322892845-6-7
  12.  
  13. Mon Jun 5 13:54:28 1989::fgiy@oppcjnafx.gov::613029268-4-9
  14.  
  15. Sun Jul 25 05:27:23 2004::agmljfx@qvxgjqtkiwnl.org::1090704443-7-12
  16.  
  17. Mon Nov 14 16:15:36 2005::tctz@bcikib.gov::1131956136-4-6
  18.  
  19. Sun Jan 14 23:20:42 2007::qqlfkf@isslbh.com::1168788042-6-6
  20.  
  21. Sun Jul 27 02:00:13 1980::cpiqwau@drbpfsfglip.edu::333482413-7-11
  22.  
  23. Sun Feb 20 16:10:34 2005::aguqfd@hnrcaged.com::1108887034-6-8
  24.  
  25. Wed Jun 27 06:13:05 1979::kowyk@ruoackjavkpq.net::299283185-5-12
  26.  
  27. Wed Oct 12 19:52:54 1994::kqaol@mzewoas.edu::781962774-5-7
  28.  
  29. Thu Aug 23 01:46:59 1973::uofpdq@zdeidbobin.org::114889619-6-10
  30.  
  31. Sat Dec 21 11:36:20 1991::hodw@wfbw.org::693286580-4-4
  32.  
  33. Tue Jun 22 14:42:19 1993::azgagm@nfmguh.org::740731339-6-6
  34.  
  35. Sun Feb 23 04:50:57 2003::cysfu@fnzdo.com::1045947057-5-5
  36.  
  37. Fri Jun 10 13:38:02 1983::qdhqw@fcdsvlmnhx.net::424071482-5-10
  38.  
  39. Sat Jan 24 21:56:37 1998::dfyicjw@fklbymd.org::885650197-7-7
  40.  
  41. Sun Jun 3 07:48:45 2007::wptuyjk@tsngnle.edu::1180828125-7-7
  42.  
  43. Mon Nov 19 00:34:41 2001::ocjlb@nusyk.net::1006101281-5-5
  44.  
  45. Sat Dec 1 21:01:23 1973::bvhx@lmir.net::123598883-4-4
  46.  
  47. Sun Dec 16 17:42:51 1979::rpgs@hppau.org::314185371-4-5
  48.  
  49. Mon Jul 21 23:46:13 1986::fnsro@nmbcwdmie.org::522344773-5-9
  50.  
  51. ---------------match_date--------------------
  52.  
  53. ('Sun', ' Mar 5 00:55:55 1989::qvnc@ygeowwaf.com::605033755-4-8')
  54. ('Mon', ' Oct 17 17:16:31 2005::yene@rtewqvvyfe.edu::1129540591-4-10')
  55. ('Tue', ' Oct 7 06:33:30 2003::wlyi@coagmnososzy.edu::1065479610-4-12')
  56. ('Mon', ' Oct 16 00:01:06 2006::zsgok@jkpiplcm.edu::1160928066-5-8')
  57. ('Wed', ' Mar 15 06:37:35 2000::paok@anpekysphicu.com::953073455-4-12')
  58. ('Wed', ' Mar 26 12:27:25 1980::bodqoe@iydohek.org::322892845-6-7')
  59. ('Mon', ' Jun 5 13:54:28 1989::fgiy@oppcjnafx.gov::613029268-4-9')
  60. ('Sun', ' Jul 25 05:27:23 2004::agmljfx@qvxgjqtkiwnl.org::1090704443-7-12')
  61. ('Mon', ' Nov 14 16:15:36 2005::tctz@bcikib.gov::1131956136-4-6')
  62. ('Sun', ' Jan 14 23:20:42 2007::qqlfkf@isslbh.com::1168788042-6-6')
  63. ('Sun', ' Jul 27 02:00:13 1980::cpiqwau@drbpfsfglip.edu::333482413-7-11')
  64. ('Sun', ' Feb 20 16:10:34 2005::aguqfd@hnrcaged.com::1108887034-6-8')
  65. ('Wed', ' Jun 27 06:13:05 1979::kowyk@ruoackjavkpq.net::299283185-5-12')
  66. ('Wed', ' Oct 12 19:52:54 1994::kqaol@mzewoas.edu::781962774-5-7')
  67. ('Thu', ' Aug 23 01:46:59 1973::uofpdq@zdeidbobin.org::114889619-6-10')
  68. ('Sat', ' Dec 21 11:36:20 1991::hodw@wfbw.org::693286580-4-4')
  69. ('Tue', ' Jun 22 14:42:19 1993::azgagm@nfmguh.org::740731339-6-6')
  70. ('Sun', ' Feb 23 04:50:57 2003::cysfu@fnzdo.com::1045947057-5-5')
  71. ('Fri', ' Jun 10 13:38:02 1983::qdhqw@fcdsvlmnhx.net::424071482-5-10')
  72. ('Sat', ' Jan 24 21:56:37 1998::dfyicjw@fklbymd.org::885650197-7-7')
  73. ('Sun', ' Jun 3 07:48:45 2007::wptuyjk@tsngnle.edu::1180828125-7-7')
  74. ('Mon', ' Nov 19 00:34:41 2001::ocjlb@nusyk.net::1006101281-5-5')
  75. ('Sat', ' Dec 1 21:01:23 1973::bvhx@lmir.net::123598883-4-4')
  76. ('Sun', ' Dec 16 17:42:51 1979::rpgs@hppau.org::314185371-4-5')
  77. ('Mon', ' Jul 21 23:46:13 1986::fnsro@nmbcwdmie.org::522344773-5-9')
  78.  
  79. ---------------match_time_slot--------------------
  80.  
  81. ('', '', 'agmljfx@qvxgjqtkiwnl.org::1090704443-7-12')
  82. ('', '', 'aguqfd@hnrcaged.com::1108887034-6-8')
  83. ('', '', 'cysfu@fnzdo.com::1045947057-5-5')
  84.  
  85. ---------------match_name--------------------
  86.  
  87. ('qvnc', 'ygeowwaf', 'com')
  88. ('yene', 'rtewqvvyfe', 'edu')
  89. ('wlyi', 'coagmnososzy', 'edu')
  90. ('zsgok', 'jkpiplcm', 'edu')
  91. ('paok', 'anpekysphicu', 'com')
  92. ('bodqoe', 'iydohek', 'org')
  93. ('fgiy', 'oppcjnafx', 'gov')
  94. ('agmljfx', 'qvxgjqtkiwnl', 'org')
  95. ('tctz', 'bcikib', 'gov')
  96. ('qqlfkf', 'isslbh', 'com')
  97. ('cpiqwau', 'drbpfsfglip', 'edu')
  98. ('aguqfd', 'hnrcaged', 'com')
  99. ('kowyk', 'ruoackjavkpq', 'net')
  100. ('kqaol', 'mzewoas', 'edu')
  101. ('uofpdq', 'zdeidbobin', 'org')
  102. ('hodw', 'wfbw', 'org')
  103. ('azgagm', 'nfmguh', 'org')
  104. ('cysfu', 'fnzdo', 'com')
  105. ('qdhqw', 'fcdsvlmnhx', 'net')
  106. ('dfyicjw', 'fklbymd', 'org')
  107. ('wptuyjk', 'tsngnle', 'edu')
  108. ('ocjlb', 'nusyk', 'net')
  109. ('bvhx', 'lmir', 'net')
  110. ('rpgs', 'hppau', 'org')
  111. ('fnsro', 'nmbcwdmie', 'org')
  112.  
  113. Process finished with exit code 0

Python中re模块的使用的更多相关文章

  1. Python中optionParser模块的使用方法[转]

    本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内 ...

  2. python中threading模块详解(一)

    python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...

  3. 【转】关于python中re模块split方法的使用

    注:最近在研究文本处理,需要用到正则切割文本,所以收索到了这篇文章,很有用,谢谢原作者. 原址:http://blog.sciencenet.cn/blog-314114-775285.html 关于 ...

  4. Python中的模块介绍和使用

    在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一 ...

  5. python中导入模块的本质, 无法导入手写模块的解决办法

    最近身边一些朋友发生在项目当中编写自己模块,导入的时候无法导入的问题. 下面我来分享一下关于python中导入模块的一些基本知识. 1 导入模块时寻找路径 在每一个运行的python程序当中,都维护了 ...

  6. Python中time模块详解

    Python中time模块详解 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. ...

  7. Python中collections模块

    目录 Python中collections模块 Counter defaultdict OrderedDict namedtuple deque ChainMap Python中collections ...

  8. Python中pathlib模块

    Python中pathlib模块 Path.cwd():返回当前目录的路径 Path.home():返回当前用户的家目录 Path.stat():返回此路径信息 Path.touch():创建文件 P ...

  9. Python 中包/模块的 `import` 操作

    版权声明:博客为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/10745292.html 用实例来说明 import 的作用吧. 创建 ...

  10. 正则表达式与Python中re模块的使用

    正则表达式与Python中re模块的使用 最近做了点爬虫,正则表达式使用的非常多,用Python做的话会用到re模块. 本文总结一下正则表达式与re模块的基础与使用. 另外,给大家介绍一个在线测试正则 ...

随机推荐

  1. ABP WebApi 加载错误

    [TypeLoadException:类型'Abp.WebApi.Validation.AbpApiValidationFilter'中的方法'ExecuteActionFilterAsync'从程序 ...

  2. Java:对象的强、软、弱和虚引用[转]

    原文链接:http://zhangjunhd.blog.51cto.com/113473/53092/ 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法 ...

  3. Codeforces Round #410 (Div. 2)

    Codeforces Round #410 (Div. 2) A B略..A没判本来就是回文WA了一次gg C.Mike and gcd problem 题意:一个序列每次可以把\(a_i, a_{i ...

  4. BZOJ 4455: [Zjoi2016]小星星 [容斥原理 树形DP]

    4455: [Zjoi2016]小星星 题意:一个图删掉一些边形成一棵树,告诉你图和树的样子,求让图上的点和树上的点对应起来有多少方案 看了很多题解又想了一段时间,感觉题解都没有很深入,现在大致有了自 ...

  5. BZOJ 4216: Pig [分块]

    传送门 询问区间和...内存3M 分块前缀和... 我连swap都是这么l=l^r , r=l^r , l=l^r写的.... #include <cstdio> typedef long ...

  6. js作用域的相关知识

    众所周知,在ES6之前,JavaScript是没有块级作用域的,如下图所示: 学过其他语言的同学肯定有点诧异,为什么会这样呢?因为js还是不同于其他语言的,在ES5中,只有全局作用域和函数作用域,并没 ...

  7. linux使用i/o内存访问外设

    一.linux中访问外设的方法. 1.IO端口(IO port) linux系统给外设分配不同的端口号,linux利用端口号来访问设备(驱动) (cpu x86) cpu访问外设通过端号,访问通过地址 ...

  8. memcached安装与使用详解

    一.memcache的简介 memcache是高速,分布式的内存缓存服务器 php的缓存方式一般可以使用memcache技术和redis技术,其中各有优劣,因不同的情况而选择较为适合的缓存技术,其中m ...

  9. 借腾讯开源 VasDolly,谈谈 Android 签名和多渠道打包的原理!

    一.前言 Hi,大家好,我是承香墨影! 当我们需要发布一款 App 到应用市场的时候,一般需要我们针对不同的市场生产不同的渠道包,它们使用的是同一套代码,只是会包含一些各自的渠道信息,用于我们做数据分 ...

  10. ubuntu命令行下java工程编辑与算法(第四版)环境配置

    ubuntu命令行下java工程编辑与算法(第四版)环境配置 java 命令行 javac java 在学习算法(第四版)中的实例时,因需要安装配套的java编译环境,可是在编译java文件的时候总是 ...