re模块

imort re

1、\w  \W

  1. print(re.findall('\w','ab 12\+- _*&')) #\w 匹配字母 数字 及下划线
  1. 执行结果:['a', 'b', '1', '2', '_']
  1. print(re.findall('\W','ab 12\+- _*&')) #\w 匹配非字母 数字 及下划线
  1. 执行结果:[' ', '\\', '+', '-', ' ', '*', '&']

2、\s  \S

  1. print(re.findall('\s','ab 12\+- _*&')) #\s 匹配任意空白字符,等价于[\t\n\r\f]
  1. 执行结果:[' ', ' ']
  1. print(re.findall('\S','ab 12\+- _*&')) #\s 匹配非空白字符
  1. 执行结果:['a', 'b', '1', '2', '\\', '+', '-', '_', '*', '&']

3、\d  \D

  1. print(re.findall('\d','ab 12\+- _*&')) #\s 匹配任意数字,等价于[0-9]
  1. 执行结果:['1', '2']
  1. print(re.findall('\D','ab 12\+- _*&')) #\s 匹配非数字
  1. 执行结果:['a', 'b', ' ', '\\', '+', '-', ' ', '_', '*', '&']

综合:

  1. print(re.findall('\w_sb','egon alex_sb12332wxx_sb,lxx_sb'))
  1. 执行结果:['x_sb', 'x_sb', 'x_sb']

4、\A  基本上不用

  1. print(re.findall('\Aalex','alex isalex sb'))#从头开始匹配只匹配第一个alex
  1. 执行结果:['alex']
  1. print(re.findall('alex','alex isalex sb'))
  1. 执行结果:['alex', 'alex']

5、\^

  1. print(re.findall('^alex','alex is salexb'))#从头开始匹配,匹配到第一个则不往后匹配
  1. 执行结果:['alex']
  1. print(re.findall('sb','alexsb is sbalexsb'))#从头开始匹配,匹配所有
  1. 执行结果:['sb', 'sb', 'sb']
  1. print(re.findall('^sb','alexsb is sbalexsb'))#从头开始匹配,第一个没有则不往后面匹配
  1. 执行结果:[]

6、\Z  \$

  1. print(re.findall('sb\Z','alexsb is sbalexsb'))#从尾部开始匹配,匹配到则不往前匹配
  1. 执行结果:['sb']
  1. print(re.findall('sb$','alexsb is sbalexsb'))#从尾部开始匹配,匹配到则不往前匹配
  1. 执行结果:['sb']

综合:

  1. print(re.findall('^ebn$','ebn'))#从头开始找,正反找都是ebn,都可以匹配上
  1. 执行结果:['ebn']

7、\n  \t  (同理)

  1. print(re.findall('\n','a\nc a\tc al\nc'))#匹配到\n
  1. 执行结果:['\n', '\n']
  1. print(re.findall('a\nc','a\nc a\tc al\nc'))#匹配到['a\nc']
  1. 执行结果:['a\nc']

重复匹配:  .  ?  *  +  {m,n}  .*  .*?

1、.  :代表除了换行符外的任意一个字符

  1. print(re.findall('a.c','abc alc aAsc aaaaaac'))#匹配以a开头以c结尾.代表中间的任意一个字符
  1. 执行结果:['abc', 'alc', 'aac']
  1. print(re.findall('a.c','abc alc aAc aaaaaa\nc'))#ac中间有换行符\n所以匹配不到a\nc
  1. 执行结果:['abc', 'alc', 'aAc']
  1. print(re.findall('a.c','abc alc aAsc aaaaaa\nc',re.DOTALL))#.能匹配ac中间的所有一个字符,包括\n
  1. 执行结果:['abc', 'alc', 'a\nc']

2、?  :代表左边那一个字符重复0次或1次

  1. print(re.findall('ab?','a ab abb abbb abbbb abbbbb albbbbb'))#从头匹配ab中,b是零个或一个
  1. 执行结果:['a', 'ab', 'ab', 'ab', 'ab', 'ab', 'a']

3、*  :代表左边那一个字符出现0次或无穷次

  1. print(re.findall('ab*','a ab abb abbb abbbb abbbbb albbbbbbb'))#从头匹配ab中,b是零个或无穷个
  1. 执行结果:['a', 'ab', 'abb', 'abbb', 'abbbb', 'abbbbb', 'a']

4、+  :代表左边那一个字符出现至少一次或无穷次

  1. print(re.findall('ab+','a ab abb abbb abbbb abbbbb albbbbbbb'))#从头匹配ab中,b是一个或无穷个
  1. 执行结果:['ab', 'abb', 'abbb', 'abbbb', 'abbbbb']

5、{m,n}  :代表左边那一个字符出现m次到n次

  1. print(re.findall('ab?','a ab abb abbb abbbb abbbbb albbbbbb'))
  2. print(re.findall('ab{0,1}','a ab abb abbb abbbb abbbbb albbbbbb'))
  1. 执行结果:['a', 'ab', 'ab', 'ab', 'ab', 'ab', 'a'] , ['a', 'ab', 'ab', 'ab', 'ab', 'ab', 'a']
  1. print(re.findall('ab*','a ab abb abbb abbbb abbbbb albbbbbbb'))
  2. print(re.findall('ab{0,}','a ab abb abbb abbbb abbbbb albbbbbbb'))
  1. 执行结果:['a', 'ab', 'abb', 'abbb', 'abbbb', 'abbbbb', 'a'] , ['a', 'ab', 'abb', 'abbb', 'abbbb', 'abbbbb', 'a']
  1. print(re.findall('ab+','a ab abb abbb abbbb abbbbb albbbbbbb'))
  2. print(re.findall('ab{1,}','a ab abb abbb abbbb abbbbb albbbbbbb'))
  1. 执行结果:['ab', 'abb', 'abbb', 'abbbb', 'abbbbb'] ['ab', 'abb', 'abbb', 'abbbb', 'abbbbb']
  1. print(re.findall('ab{1,3}','a ab abb abbb abbbb abbbbb albbbbbbb'))
  1. 执行结果:['ab', 'abb', 'abbb', 'abbb', 'abbb']

6、.*  :匹配任意长度,任意的字符=====》贪婪匹配

  1. print(re.findall('a.*c','ac a123c aaaac a * 123) ()c asdfsdfkjdls'))#尽可能长的匹配
  1. 执行结果:['ac a123c aaaac a * 123) ()c']

7、.*?  :非贪婪匹配

  1. print(re.findall('a.*?c','a123c456c'))#尽可能短的匹配
  1. 执行结果:['a123c']

8、()  :分组

  1. print(re.findall('(alex)_sb','alex_sb sfksdfksdalex_sb'))#在匹配到的情况下只留括号内的内容
  1. 执行结果:['alex', 'alex']

例子:非贪婪匹配到网址

  1. print(re.findall('href="(.*?)"','<li><a id="blog_nav_sitehome" class="menu" href="https://www.cnblogs.com/happyfei/">博客园</a></li>'))
  1. 执行结果:['https://www.cnblogs.com/happyfei/']

9、[]  :匹配一个指定范围内的字符(这一字符来自于括号内定义的)

  1. print(re.findall('a[0-9]c','a1c a+c a2c a9c a*c a11c a-c acc aAc '))#-号在[]内有特殊意义,如果要匹配带-号的,-号要放在最前面或最后面
  1. 执行结果:['a1c', 'a2c', 'a9c']
  1. print(re.findall('a[-+*]c','a1c a+c a2c a9c a*c a11c a-c acc aAc '))
  1. 执行结果:['a+c', 'a*c', 'a-c']
  1. print(re.findall('a[a-zA-Z]c','a1c a+c a2c a9c a*c a11c a-c acc aAc '))
  1. 执行结果:['acc', 'aAc']
  1. print(re.findall('a[^a-zA-Z]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc '))#[]内的^代表取反的意思
  1. 执行结果:['a c', 'a1c', 'a+c', 'a2c', 'a9c', 'a*c', 'a-c']

例子:取出_sb

  1. print(re.findall('[a-z]_sb','egon alex_sb12332wxx_sb,lxx_sb'))#[]匹配一个字符后面跟_sb
  1. 执行结果:['x_sb', 'x_sb', 'x_sb']
  1. print(re.findall('[a-z]+_sb','egon alex_sb12332wxxxxx_sb,lxx_sb'))#[]+匹配多个字符后面跟_sb
  1. 执行结果:['alex_sb', 'wxxxxx_sb', 'lxx_sb']
  1. print(re.findall('([a-z]+)_sb','egon alex_sb12332wxxxxx_sb,lxx_sb'))#只取到_sb的人名
  1. 执行结果:['alex', 'wxxxxx', 'lxx']

10、|  :代表或者

  1. print(re.findall('compan(ies|y)','Too many companies have gone bankrupt, and the next none is my company'))#取出公司的英文单词
  1. 执行结果:['ies', 'y']

注:(?:代表取匹配成功的所有内容,而不仅仅只是括号内的内容)

  1. print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt, and the next none is my company'))
  1. 执行结果:['companies', 'company']
  1. print(re.findall('alex|sb','alex sb ssdfsdf alex sb egon'))
  1. 执行结果:['alex', 'sb', 'alex', 'sb']

11、re模块的其他用法

  1. print(re.findall('alex|sb','123123 alex sb sdlfjlsdkegon alex sb egon'))
  2. print(re.search('alex|sb','123123 alex sb sdlfjlsdkegon alex sb egon').group())
  3. #执行结果:['alex', 'sb', 'alex', 'sb'] , alex
  4.  
  5. print(re.search('^alex','alex sb sdlfjlsdkegon alex sb egon').group())#表示从头开始匹配
  6. print(re.match('alex','alex sb sdlfjlsdkegon alex sb egon').group())#表示从头开始匹配
  7. #执行结果:alex , alex
  8.  
  9. info='a:b:c:d'
  10. print(info.split(':'))
  11. print(re.split(':',info))
  12. #执行结果:['a', 'b', 'c', 'd'] , ['a', 'b', 'c', 'd']
  13.  
  14. info='a :c\d/e'
  15. print(re.split('[ :\\\/]',info))
  16. #执行结果:['a', '', 'c', 'd', 'e']
  17.  
  18. #需求:xxx与Sb调换
  19. print(re.sub('(xxx)(.*?)(SB)',r'\3\2\1',r'xxx is SB'))
  20. #执行结果:SB is xxx
  21.  
  22. print(re.sub('([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)',r'\5\2\3\4\1',r'xxx123+ is SB'))
  23. #执行结果:SB123+ is xxx
  24.  
  25. pattern=re.compile('alex')#把常用的正则表达式式存起来,以后直接用
  26. print(pattern.findall('alex is alex sdjflk alexalex'))
  27. #执行结果:['alex', 'alex', 'alex', 'alex']

2018-08-18   19:20:32

re模块(详解正则)的更多相关文章

  1. ansible中常用模块详解

    ansible中常用的模块详解: file模块 ansible内置的可以查看模块用法的命令如下: [root@docker5 ~]# ansible-doc -s file - name: Sets ...

  2. BeautifulSoup 模块详解

    BeautifulSoup 模块详解 BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查找指定元素,从而使得在HT ...

  3. Burpsuite模块—-Intruder模块详解

    一.简介 Burp Intruder是一个强大的工具,用于自动对Web应用程序自定义的攻击,Burp Intruder 是高度可配置的,并被用来在广范围内进行自动化攻击.你可以使用 Burp Intr ...

  4. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  5. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  6. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

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

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

  8. python time 模块详解

    Python中time模块详解 发表于2011年5月5日 12:58 a.m.    位于分类我爱Python 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括: ...

  9. python time模块详解

    python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明  一.简介 ...

  10. 小白的Python之路 day5 time,datatime模块详解

    一.模块的分类 可以分成三大类: 1.标准库 2.开源模块 3.自定义模块 二.标准库模块详解 1.time与datetime 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时 ...

随机推荐

  1. Jmeter入门18 Jmeter添加cookie的两种方式

    jmeter中添加cookie可以通过配置HTTP Cookie Manager,也可以通过HTTP Header Manager,因为cookie是放在头文件里发送的. 实例:博客园点击添加新随笔  ...

  2. C语言 字符串的声明与使用

    // 字符串的定义和初始化 void test() { // "mj" char s[] = {'m', 'j', '\0'}; // 字符串"mj" ] = ...

  3. vue.js--基础 事件结合双向数据绑定实现todolist 待办事项 已经完成 和进行中,键盘事件

    <template> <div id="app"> <h1>{{ msg }}</h1> <input type=" ...

  4. VMWARE下CentOS7虚拟机网络配置

    注:本文仅针对新装的虚拟机,#ip addr 获取不到ip信息,无法连接网络的情况提供一种参考解决方案. 1.左上角点击“编辑”->“虚拟网络编辑器”.新建一个NAT模式的网络. 2.配置虚拟机 ...

  5. PHP设计模式——桥接模式

    <?php /* * 桥接模式 * 使用发送器,将一个类对象传入另一个类作为属性,耦合M+N个类 * */ abstract class Info { protected $_send = NU ...

  6. 2018.11.24 struts2中的OGNL表达式及两者的结合

    OGNL表达式 OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航. OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能. 理解图示 使用OGNL准备工 ...

  7. eclipse properties 文件查看和编辑插件

    *.properties属性文件,如果文件中包含中文,会出现乱码.为了解决这个问题,可以为Eclipse安装Properties Editor插件解决这个问题. 步骤 1  安装Properties ...

  8. 【Calculus 微积分の一些个人理解】

    微积分 微积分(Calculus)是高等数学中研究函数的微分(Differentiation).积分(Integration)以及有关概念和应用的数学分支.它是数学的一个基础学科.内容主要包括极限.微 ...

  9. 【luogu P1536 村村通】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1536 并查集的运用,可以用生成树的思想,就是n个点生成一棵树需要n-1条边.这样我们先把已有的路连接到一个并 ...

  10. java 注解annotation的使用,以及反射如何获取注解

     一.注解基本知识 1.元注解 元注解是指注解的注解.包括  @Retention @Target @Document @Inherited四种. 1. Annotation型定义为@interfac ...