在网上总是很难找到令自己比较满意的,关于正则表达式的文章。所以决定自己来总结一波,并配上相应的示例。

正则表达式:定义了规则,用来字符串处理。

用途:

1、匹配 - 符合规则的字符串,则认为匹配了。

2、提取 - 提取出符合规则的字符串。

python中通过re模块来处理正则表达式。re模块的常用方法如下:

re.match(re规则,字符串):从头开始匹配。从字符串的第一个字符开始匹配,如果第一个字符不匹配规则,那么匹配失败。

re.search(re规则,字符串):匹配包含。不要求从字符串的第一个字符就匹配。只要字符串当中有匹配该规则的,则就匹配成功。

re.findall(re规则,字符串):把所有匹配的字符放在列表中并返回。

re.sub(re规则,替换串,被替换串):匹配字符并替换。

正则表达式常用的规则如下:

下面一一示例来说明:

'.' : 是只匹配一个字符(除了\n)

  如字符串a="hello123world!!" , 那么'.'匹配到的结果为:"h" .从字符串a中搜索,搜索什么呢,符合规则'.'的数据。

1 >>> import re   #导入正则模块
2 >>> re.search('.','hello123world!!')   #使用search方法
3 <_sre.SRE_Match object; span=(0, 1), match='h'>  #匹配成功,返回了一个匹配对象。匹配的结果为:h      match=表示匹配到的结果

'^' : 匹配字符串的开头。指定字符串必须以什么开头,如果不一样,则匹配失败。

  如字符串a="hello123world!!" , 那么'^h'匹配到的结果为:"h" .如果是'^F'则匹配失败

1 >>> re.search('^h','hello123world!!')
2 <_sre.SRE_Match object; span=(0, 1), match='h'>   #匹配以h开头的字符串,匹配成功,匹配结果为:h
3 >>> re.search('^F','hello123world!!')
4 >>>                      #匹配失败,为None

re.match方法也是从字符串开头匹配。所以与^效果一样:

1 1 >>> re.match('h','hello123world!!')
2 2 <_sre.SRE_Match object; span=(0, 1), match='h'>    #匹配以h开头的字符串,匹配成功,匹配结果为:h
3 3 >>> re.match('F','hello123world!!')
4 4 >>>    #匹配失败,没有输出

'$':指定字符串以$前的字符结尾 。

1 >>> re.search('!$','hello123world!!')
2 <_sre.SRE_Match object; span=(14, 15), match='!'>  #匹配以!结尾的字符串,匹配成功,匹配结果为:!

4 >>> re.search('D$','hello123world!!')
5 >>>     #匹配以D结尾的字符串,失败

'*':表示匹配前面的字符 0次 或者 多次

'+':表示匹配前面的字符 1次 或者 多次

以上的所有匹配都只是匹配到了一个字符。那这两个匹配符则可以匹配多次。

1 >>> re.search('lll*','hello123world!!')
2 <_sre.SRE_Match object; span=(2, 4), match='ll'>  #*可以匹配到至于2个l
3
4 >>> re.search('lll+','hello123world!!')
5 >>>    # +至少要匹配三个l   所以匹配失败

如果我想要指定匹配次数呢? -----

'{m} ':指定匹配前面字符的次数。

1 >>> re.search('el{2}','hello123world!!')
2 <_sre.SRE_Match object; span=(1, 4), match='ell'>  #匹配l两次
3 >>>
4 >>> re.search('el{3}','hello123world!!')   #匹配l三次 ,匹配失败
5 >>>
6 >>> re.search('el{1}','hello123world!!')
7 <_sre.SRE_Match object; span=(1, 3), match='el'>  #匹配l一次

如果只考虑匹配 0次 或者 1次呢 ---

'?':表示匹配前面的字符 0次 或者 1次

1 >>> re.search('el?','hello123world!!')
2 <_sre.SRE_Match object; span=(1, 3), match='el'>  #?匹配l 0次或者 1次
3 >>>
4 >>> re.search('ello7?','hello123world!!')
5 <_sre.SRE_Match object; span=(1, 5), match='ello'> #? 匹配7 0次或者1次

第一波总结到这里打止。。欢迎留言和交流。


												

re模块 - 正则表达式 疏理(一)的更多相关文章

  1. Python中的re模块--正则表达式

    Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...

  2. 【Python开发】Python之re模块 —— 正则表达式操作

    Python之re模块 -- 正则表达式操作 这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式 ...

  3. sys,os,模块-正则表达式

    # *__conding:utf-8__* """"我是注释""" sys,os模块 import sysimport os pr ...

  4. Python之re模块 —— 正则表达式操作

    这个模块提供了与 Perl 相似l的正则表达式匹配操作.Unicode字符串也同样适用. 正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突, ...

  5. Python re模块 正则表达式

    1 简介 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...

  6. s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译

    时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...

  7. re 模块 正则表达式

    re模块(正则表达式)   一.什么是正则表达式 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它 ...

  8. Python3 re模块(正则表达式)

    一:什么是正则? 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. (在Python中)它内嵌在Python中,并通过r ...

  9. re模块正则表达式

    regular expression / regex / RE 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配.Python 自1.5版本起增加了re 模块,它提供 ...

随机推荐

  1. 逆向学习-Upack的PE文见头分析

    重叠文件头 MZ文件头与PE文件头重叠. offest 0 e_magic:magic number = 4D5A('MZ') offest 3C  e_lfanew:File address of ...

  2. Charles(V3.10.1)的抓包以及常见功能的使用

    一.Charles的安装 安装都不会,那就不用再往下看了.(*^__^*) 嘻嘻…… 二.HTTP抓包 1.查看电脑IP地址 2.设置手机的HTTP代理 手机连接到同一WiFi下设置HTTP代理: 服 ...

  3. 移除 iview的Input组件默认background效果

    .class名 .ivu-input-group-prepend{ background:rgba(255,255,255,0); color: #fff; }

  4. vue各种插件汇总

    https://blog.csdn.net/wh8_2011/article/details/80497620(copy) Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一 ...

  5. RabbitMQ消息队列

    RabbitMQ消息队列 !!!  注意,保证服务器的内存足够,磁盘足够,以及删除/etc/hosts中没有用的dns解析 # 优点,能够保证消息数据持久化,不丢失,支持高并发 安装学习rabbitm ...

  6. ubuntu apt-get install 时报错curl : Depends: libcurl4 (= 7.58.0-2ubuntu3.6) but 7.61.0-1ubuntu2 is to be installed或者 vim : Depends: vim-common (= 2:8.0.1453-1ubuntu1) but 2:8.0.1766-1ubuntu1 is to be ins

    ubuntu apt-get install 时报错:Depends: ***(=某版本)but***(另一版本)is to be installed 这时候就把这个***给purge后再重新装就好了 ...

  7. 命令级的python静态资源服务。

    python -m SimpleHTTPServer 在当前目录起python静态资源服务.

  8. java并发编程 | 线程详解

    个人网站:https://chenmingyu.top/concurrent-thread/ 进程与线程 进程:操作系统在运行一个程序的时候就会为其创建一个进程(比如一个java程序),进程是资源分配 ...

  9. atomic详解

    http://www.360doc.com/content/14/1120/21/203028_426770242.shtml

  10. Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array(动态规划.递推)

    传送门 题意: 给你一个包含 n 个元素的序列 a[]: 定义序列 a[] 的 beauty 为序列 a[] 的连续区间的加和最大值,如果全为负数,则 beauty = 0: 例如: a[] = {1 ...