Python 正则表达式(转义问题)
于是就引入了正则表达式的使用。一番搜索囫囵吞枣后,我写下了这样的函数:
def sanitize_filename(filename):
return re.sub('[\/:*?|]', '_', filename)
最近意识到了这个函数里的好多问题:
- Python 和 Shell 不同,无论单引号还是双引号,反斜杠都是转义符。走*运的是,Python 对于没意义的转义
\/
的处理是保持原样。 - 即便如此,
sanitize_filename('\\/:*?|')
依旧返回\_______
而不是全部都是下划线。
于是感觉得正正经经看看文档了。
Raw strings
看了文档后才意识到,Python 正则表达式模块的转义是独立的。例如匹配一个反斜杠字符需要将参数写成:'\\\\':
Python 将字符串转义:\\\\ 被转义为 \\
re 模块获得传入的 \\ 将其解释为正则表达式,按照正则表达式的转义规则将其转义为 \
如此麻烦的前提下,Raw String 就大有作为了,顾名思义就是(除了结尾的反斜杠)不会被转义的字符串。于是匹配一个反斜杠字符就可以写作 r'\\'。
所以上面的 sanitize_filename 改成了:
def sanitize_filename(filename):
return re.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)相关信息的方法。
>>> for m in re.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
参考
- The Python Standard Library: http://docs.python.org/2/library/re.html
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
推荐阅读
-
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
-
PYTHON 中使用 GLOBAL引发的一系列问题
-
python列表生成式、键盘输入、字符串翻转、字母大小写、数组广播、循环语句等基础问题
-
Python pip的自动更新升级失败问题解决方案
-
Python2.x版本中基本的中文编码问题解决
-
PHP 转义正则表达式字符: preg_quote_PHP教程
-
mysql转义字符插入、查询及显示问题,求点拨
-
js-关于html标签转义的问题
-
python 正则表达式 re.sub & re.subn
-
python3.7安装, 解决pip is configured with locations that require TLS/SSL问题
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论