正则表达式并不是python的一部分,正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。如果已经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了。

下图展示了使用正则表达式进行匹配的流程:

正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。如果表达式中有量词或边界,这个过程会稍微有一些不同,但也是很好理解的,看下图中的示例以及自己多使用几次就能明白。

python通过re模块提供对正则表达式的支持,在python中使用‘r’解决转义字符带来的困扰,例如r"\n"是由‘\’和'n'两个字符组成。正则表达式可以包含特殊和普通字符,对于普通字符很好处理,只需匹配他们,但是对于特殊字符,例如‘|’或'('这样的字符,就要特殊处理了。特殊字符:‘.’

.是默认模式,它能匹配任意字符除了换行符,如果DOTALL标识被指定,将会匹配包括换行符在内的任意字符。

例如

字符串:abcdfgh

正则表达式:a.cdf

匹配结果:abcdf'*'

匹配前一个字符0或无限次。例如ab*将能匹配'a','ab','abbb','abbbbbbbb'...'?'

匹配前一个字符0或1次,例如ab?将能匹配'a','ab''*?,+?,??'

'*','+','?'这些限定符是贪婪的,他们尽可能匹配多的字符,但有时并不希望是这样的,例如<.>匹配‘

title

’将匹配整个字符串,而我们只希望匹配

。这时我们可以通过在限定符后添加'?'使它变为非贪婪的,这样它将匹配尽可能少的字符。使用<.>将只匹配'

'。‘\’

转义字符,使用'\'之后的特殊字符将成为一个普通的字符,例如字符串中有*号需要匹配,使用'\*'或[*]'\w'

匹配Unicode(str)单词字符,包括单词中的大部分字符,同时还包括数字和下划线,如果使用ASCII标识,只有[a-zA-Z0-9]被匹配,这种情况下,最好明确写出需要匹配的字符。例如:

字符串:abcde

表达式:a\wcd

匹配结果:abcd'(...)'

被括起来的表达式将作为分组,从表达式的左边开始每遇到一个分组的左括号‘(’,编号+1.另外分组表达式作为一个整体,可以后接数量词,表达式中的'|'仅在该组中有效。例如:(abc){2}匹配 的字符:abcabc;a(123|456)c 匹配的字符:a123c、a456c.

'+'

匹配前一个字符1次或无限次。

表达式:abc+

匹配结果:abcccc

表达式:[\.a-zA-Z/]+表示匹配字母、点号或斜线。

(待积累...)

2. re方法:

re.sub(pattern, repl,

string, count=0, flags=0)

使用repl根据pattern替换string中的字符并返回字符串。如果没有pattern,返回的string没有改变;repl可以是一个字符串或者函数,如果是字符串,转义字符可以被处理;如果repl是一个函数,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。count用于指定最多替换次数,不指定时全部替换。

例如>>> import re

>>> re.sub('[abc]','o','Mark')

'Mork'

将'Mark'匹配到‘[abc]’中的任何一个时,用'o'替换。

re.match(pattern, string,

flags=0)

如果string中有一个或多个匹配表达式pattern的字符,则返回相应的match对象,否则返回None。

如果定位一个匹配项,使用search()方法。re.search(pattern, string,

flags=0)

扫描string,看有没有与表达式pattern的匹配项,如果有,返回相应的match对象,否则返回None.

(待积累。。。)

3、match对象

match对象是一次匹配的结果,通常是一个布尔值。它有如下方法和属性:

match方法:

match.group([group1, ...])

返回一个或多个匹配的子组,若只有一个参数,返回一个值,如果有多个参数,则以元组形式返回,如果没有参数。group1默认为0,返回整个匹配,如果groupN参数为0,仍然返回整个匹配字符串,如果返回字符返回超过匹配范围,抛出IndexError异常。

>>> m=re.match(r'(\w+)(\w+)','isaac newton,physicists')

>>> m.group(0)

'isaac'

>>> m.group(1)

'isaa'

>>> m.group(2)

'c'

>>> m.group(3)

Traceback (most recent call last):

File "", line 1, in

m.group(3)

IndexError: no such group

>>> m.group(1,2)

('isaa', 'c')

python读取文件夹下文件名称唯美_python模块学习(2)——re模块相关推荐

  1. 批量修改文件夹下图片名称(Python)

    本程序的功能是:批量修改文件夹下图片名称. import os import redef replcaeFileName(pic_path): # 修改pic_path路径下的文件名piclist = ...

  2. python 内置的os模块将文件夹下所有图片名称加上指定字符

    # eg:将文件夹下所有图片名称加上'M' def change_name(path_img):global iif os.path.isfile(path_img):file_path=os.pat ...

  3. java读取文件夹下的所有txt文件,java读取文件夹下文件及txt内容

    public class PositionController { // 读取txt内容 public static String txt2String(File file) { StringBuil ...

  4. 删除当前文件夹下特定名称文件

    以下命令删除当前文件夹下所有名称带log的文件 find   . -name "*log*" |xargs rm -rf

  5. python观察日志(part18)--遍历文件夹下文件并判断后缀

    学习笔记,仅供参考 import ospath = r"F:\MyStudio\PythonStudio\goatbishop.project01\MyNewWork" fileN ...

  6. bat批处理修改文件夹下文件名字

    bat批处理修改文件夹下文件名字 业务场景 有时候我们经常会遇到需要批量处理一些文本或者文件名称的问题,批量文本的处理可以使用notepad++ 里面的列编辑,或者批量替换字符串即可.假如有这样一个要 ...

  7. Linux统计某文件夹下文件、文件夹的个数

    统计某文件夹下文件的个数 ls -l |grep "^-"|wc -l 统计某文件夹下目录的个数 ls -l |grep "^d"|wc -l 统计文件夹下文件 ...

  8. Linux下查看文件夹下文件个数

    统计某文件夹下文件的个数 ls -l |grep "^-"|wc -l 统计某文件夹下目录的个数 ls -l |grep "^d"|wc -l 统计文件夹下文件 ...

  9. Centos 统计文件夹下文件和文件夹的个数

    运营管理中经常会碰到关于文件统计的需求,近期在做系统迁移,正好做个备忘. 关键词: d  : directory -   : 一般文件 以下命令在需要统计的目录下进行,如: # cd 目标文件夹 统计 ...

  10. linux: 批量修改文件夹及文件夹下文件的名字

    假如我有一个文件夹,文件夹下面有一些文件,如下所示: Gideon/gideon_lisha/Gideon_samuel/Gideon_nathan.xml Gideon/lisha_gideon/G ...

最新文章

  1. mysql repair 索引_mysql 删除行会重建索引吗
  2. 网站过度优化该怎样解决?
  3. python编程lcd显示_Python api.lcd方法代码示例
  4. golang实现生产者和消费者
  5. 6 个 K8s 日志系统建设中的典型问题,你遇到过几个?
  6. 8s yaml 配置生成_接口测试框架实战(六) | 配置的数据驱动
  7. pppd 源码修改1
  8. 阿里云超算异构Spot集群,助力深势科技30%成本驱动MDaaS海量算力
  9. C语言丨比较浮点数的大小
  10. Mysql学习总结(28)——MySQL建表规范与常见问题
  11. 路由 RIP 协议 和 滞空路由
  12. php二叉树基本遍历和非递归遍历
  13. 网络编程之信号(处理僵尸进程的终极办法)之初识信号捕捉器
  14. B18-iOS9的适配相关
  15. Lock wait timeout exceeded
  16. 智慧公交可视化大屏决策管理系统改善城市交通
  17. 平均年薪60.8万,程序员拿下这个证书有多吃香?!
  18. 操作系统介绍(按发展顺序)人工操作方式、单道批处理系统、多道批处理系统、分时系统、实时系统、微机操作系统
  19. java计算机毕业设计公益诊疗系统源程序+mysql+系统+lw文档+远程调试
  20. 【蓝桥杯】历届试题 数字游戏(C++)

热门文章

  1. 天源财富:深海钻探,“海牛Ⅱ号”真牛
  2. 【Java -- 算法】分治算法、动态规划、回溯法、贪心算法
  3. iPhone手机总提示内存不足,原来可以这样清内存,5分钟多出10G内存!
  4. 技能学习:学习使用php(tp6框架) + vue.js,开发前端全栈网站-5.用户登录,密码的bcrypt(hash)加密与验证
  5. HADOOP和MPP数据库的区别
  6. 三国网页雄心服务器,新网页三国传奇联盟4大都城全部攻克
  7. 江苏对口单招计算机专业的学校,江苏对口单招能考哪些大学
  8. 华东交通大学计算机科学与技术专业,华东交通大学计算机科学与技术(计算机应用技术)在职研究生招生情况...
  9. android RecyclerView一步步打造分组效果、类似QQ分组、折叠菜单、分组效果(二)
  10. A1029 Median