python正则_Python 正则表达式(转义问题)
先说一个比较囧的事情:在写虾米音乐试听下载器的时候遇到一个问题,因为保存的文件都是用音乐的标题命名的,所以碰到一些诸如「対峙/out border」等含有非法字符(哼哼,说的就是你 →_→ Windows)的标题的时候,就会保存失败。于是我想起了迅雷的解决方法:把所有的非法字符替换成下划线。
于是就引入了正则表达式的使用。一番搜索囫囵吞枣后,我写下了这样的函数:
def sanitize_filename(filename):
returnre.sub('[/:*?<>|]','_', filename)
最近意识到了这个函数里的好多问题:
Python 和 Shell 不同,无论单引号还是双引号,反斜杠都是转义符。走狗屎运的是,Python 对于没意义的转义/的处理是保持原样。
即便如此,sanitize_filename('\/:*?<>|')依旧返回_______而不是全部都是下划线。
于是感觉得正正经经看看文档了。
Raw strings
看了文档后才意识到,Python 正则表达式模块的转义是独立的。例如匹配一个反斜杠字符需要将参数写成:'\\':
Python 将字符串转义:\\ 被转义为 \
re 模块获得传入的 \ 将其解释为正则表达式,按照正则表达式的转义规则将其转义为
如此麻烦的前提下,Raw String 就大有作为了,顾名思义就是(除了结尾的反斜杠)不会被转义的字符串。于是匹配一个反斜杠字符就可以写作 r'\'。
所以上面的 sanitize_filename 改成了:
def sanitize_filename(filename):
returnre.sub(r'[\/:*?<>|]','_', filename)
Regex 和 Match
于是正经看看 re 模块吧~以下为流水帐,供急性子观看。
Python 的正则表达式模块 re 中主要的对象其实是这俩:
正则表达式 RegexObject
匹配 MatchObject
RegexObject 是正则表达式对象,所有 match sub 之类的操作都归它所有。由 re.compile(pattern, flag) 生成。
>>> email_pattern = re.compile(r'w+@w+.w+')
>>> email_pattern.findall('My email is abc@def.com and his is user@example.com')
['abc@def.com','user@example.com']
其中的方法:
search 从任意字符开始匹配,返回 MatchObject 或者 None
match 从第一个字符开始匹配,返回 MatchObject 或者 None
split 返回由匹配分割的 List
findall 返回所有匹配的 List
finditr 返回 MatchObject 的迭代器
sub 返回替换后的字符串
subn 返回 (替换后的字符串, 替换次数)
re 模块里提供的函数如 re.sub re.match re.findall 实际上都可以认为是一种省去直接创建正则表达式对象的捷径。而由于 RegexObject 对象本身可以反复使用,这也是它相对于这些捷径函数的优势所在。
MatchObject 则是匹配对象,表示一次正则表达式匹配的结果。由 RegexObject 的一些方法返回。匹配对象永远是 True 的,另外还有一大堆用来取得正则表达式中分组(group)相关信息的方法。
>>>forminre.finditer(r'(w+)@w+.w+','My email is abc@def.com and his is user@example.com'):
... print '%d-%d %s %s'% (m.start(0), m.end(0), m.group(1), m.group(0))
...
12-23 abc abc@def.com
35-51 user user@example.com
参考
python正则_Python 正则表达式(转义问题)相关推荐
- python正则_Python基础12之Python正则
上图施工计划,已完成专题: 1.数字专题 2.字符串专题 3.列表专题 4.流程控制专题 5.编程风格专题 6.函数使用专题 7.面向对象编程(上篇) 8.面向对象编程(下篇) 9.Python基础9 ...
- python正则_python中正则匹配
写代码时候,不管是爬虫,还是获取某些特定的资源,我们需要写正则表达式. 因为不常用,有些语法生疏.有时明明觉得自己的语法可以,可就是不行. 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之 ...
- 判断是不是链接 正则_Python 正则表达式 保姆级教程,小学生都看得懂!!
~点击 蓝字 关注,获取更多资源~ 0 前言 上一篇文章,2020,还不会正则???,和小伙伴们一起学习了 Python 中的正则表达式,读完之后,总感觉少了点什么东西,无法尽兴?就好像爱你们的心少了 ...
- python 正则_python正则查找
[转摘]PYTHON 正则表达式 网上转的一篇,把正则的规则系统的分类了.. 好文,共享,备查 ~~~~~~~~~~~ http://www.cnblogs.com/huxi/archive/2010 ...
- python正则_python的正则表达式
上次小编写了正则表达式的用法,今天就小编就讲讲正则表达式再python中的应用,在python中想使用正则表达式就需要导入re模块. 接下来小编将先介绍re模块中几个常见的函数 findall: re ...
- python split 正则_Python 正则表达式:split
作用:用正则表达式的字符分割字符串,正则的字符会被抛弃. 本文以 提取URL的地址与参数 为例,介绍re模块的split的用法: 返回值 -> 列表 复杂匹配 = re.compile(正则表达 ...
- python compile正则_Python 正则表达式:compile,match
本文以匹配×××ID为例,介绍re模块的compile与match的用法 复杂匹配 = re.compile(正则表达式): 将正则表达式实例化 + re.match(要匹配的字符串): 从字符串开 ...
- python compile正则_Python 正则表达式:compile
本文以匹配×××ID为例,介绍re模块的compile与match的用法 复杂匹配 = re.compile(正则表达式): 将正则表达式实例化 + re.match(要匹配的字符串): 从字符串开 ...
- python正则化_Python正则表达式
Python正则表达式 Python正则表达式有一个模块"re",首先,在我们使用正则表达式的时候需要导入这个模块: import re 分三个部分来介绍Python正则表达式: ...
最新文章
- android 怎么判断activity 从哪里启动的
- JS中字符串的相关操作
- 为什么 Linux的开发者要转到Windows 10 平台!
- 图文并茂详解iptables 防火墙工作原理及知识点
- java数组编译后_Java中数组和集合的foreach操作编译后究竟是啥
- python文件下载速度 装饰器_python使用装饰器对文件进行读写操作'及遍历文件目录...
- 【Objective-C】05-第一个OC的类
- python程序的运行速度在所有计算机语言中最快_【编程专题】实测四种编程语言的运算速度,最快的竟然是它!...
- 【VM】—VM安装包
- [论文阅读] Pyramid Feature Attention Network for Saliency Detection
- ffffffffffffffffff
- shell 单词末尾家字符_58、最后一个单词的长度
- 郝斌数据结构与算法自学视频教程
- 几款软件需求分析工具
- SSM_config配置springmvc.xml模板
- opencms整合到java项目里_java-将标签云添加到OpenCMS网站
- 从0开始的python学习:编译原理实验1:程序语言的重复率检查
- python的内置函数
- SDM660 开机xbl中配置I2C
- python生成递归json_python函数、递归、json模块操作