Python 正则表达式 re

简介: Python 正则表达式 re

字符串匹配


[asd] 就是要匹配任何字符 a, s, d,但如果想匹配 a b c d e …… x y z 是不是要把所有的都写一遍?当然不是了,这个我们可以写成 [a-z] 就行了,- 就是用来表示一个范围,再比如表示数字 1 至 9,可以写成 [1-9] 。


上面说的是包含的字符范围,如果想匹配不包含的范围要怎么做?这就要用到元字符 ^,比如匹配除了 n, u, 3 之外的字符,可以写成 [^nu3]。


还有一点需要注意,在 [ ] 中的元字符会作为普通字符匹配,比如 [$+] 就会匹配 $, +。


最后说下元字符 \,它的意义是用于转义所有元字符,也就是去掉元字符的特殊性,比如 \{\$\\,其实就是匹配字串 {, $, \。




特殊字符


上面说了 [a-z] 可以匹配所有小写字母,[0-9] 用来匹配所有数字,这样已经够简单了,还有更简单的几种特殊范围表达方式。


字符 说明
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
\d 相当于[0-9],即匹配一个数字字符。
\D 相当于[^0-9],即匹配一个非数字字符。
\s 相当于[\f\n\r\t\v],也就是匹配任何空白字符,包括空格、制表符、换页符等等。
\S 相当于[^\f\n\r\t\v],匹配任何非空白字符。
\w 相当于[a-zA-Z0-9_],匹配任何字母与数字字符。
\W 相当于[^a-zA-Z0-9_],匹配任何非字母与数字字符。



上面这些特殊序列可以包含在字符类中,比如 [\s\d,] 即匹配任何空白字符,数字和 ,




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


只是做到匹配字符串集合,肯定是不够的,它还有个更大的优势,那就是可以指定某一部分字符是重复的,并且可以指定重复的次数。


先说第一个表示重复的元字符 *,它用来指定前面一个字符可以重复0次或者多次。


比如 ap*le 将会匹配 apple,appple,ale 等等。


这里当重复正则时,匹配引擎会尝试尽可能多的重复它。当发现模式的后续部分不匹配,则匹配引擎将会回退并以较少的重复次数再次尝试。


另一个重复的元字符 +,它用来表示前一个字符可重复1次或多次。它跟 * 相比,其实就是少了一个重复0次,也就是上面 ap*le 换成 ap+le 不会出现匹配到 ale。


第三个元字符就是 ?,它用来表示前一个字符可重复0次或1次,把上面的例子换成 ap?le,其实就是两个字符串 ale 或 aple。


最后一个复杂些就是 {m,n},这个表示前一个字符可重复次数是一个区间,也就是最少重复m次,最多重复n次。


例如 ap{2,3}le将会匹配 apple,appple 两个字符串,其他都不会匹配。




编译


对!你没看错,如果想使用正则表达式,首先得要把它编译成模式对象。编译成对象后,它就可以使用各种操作方法了,比如字串匹配查询或替换等。



Python 编译的方法是 re.compile('正则表达式'),比如 re.compile('ap?le')。

当然也可以传一些特殊的参数,比如忽略大小写,那上面的编译方法就可以写成 re.compile('ap?le', re.IGNORECASE),这样在匹配字串时就可以忽略大小写了。


那除了这个还有别的参数吗?有,下面我把一部分常用的参数列出来,对了参数还可以简写,比如刚才使用的 re.IGNORECASE 可以简写成 re.I,这样就方便多了。


以下是常用编译参数:


参数 简写 说明
IGNORECASE I 忽略大小写
ASCII A 使几个转义(\w\b\s\d)匹配仅与具有相应特征属性的 ASCII 字符匹配
DOTALL S 使 . 匹配任何字符,包括换行符
LOCALE L 进行区域设置感知匹配
MULTILINE M 多行匹配,影响 ^$
VERBOSE X 忽略正则字符串中的空格,除非空格位于字符类中或前面带有未转义的反斜杠,可以组织和缩进,还可以写注释



实例:去掉字串中的中文

>>> import re
>>> p = re.compile(r'[\u4e00-\u9fa5]')
>>> en = re.sub(pattern, '', "I love 东南 SEU.")
>>> print(en)
I love  SEU.
>>> print(en.replace("  "," "))
I love SEU.
>>> 




查找匹配


其实上面说的编译都只是在做准备,准备接下来要介绍的,正则表达式最重要的查询匹配。


常用匹配方法:


   match():当是从字符串的开头开始匹配时使用,如匹配不上返回None;

   search():通过扫描字符串,来匹配字符串任意位置,如匹配不上返回None;

   findall():这个方法返回的是个列表,即所有匹配上的字符串列表;

   finditer():这个和 findall() 相同,只是不是返回列表,而是一个 iterator。


import re
ret = re.compile('[0-9]+') 
ret.match("apple")    // 返回 None   
ret.match("12189")   // 返回 <re.Match object; span=(0, 5), match='12189'>
ret.match("121ab")   // 返回 <re.Match object; span=(0, 3), match='121'>

摘抄混分......

目录
相关文章
|
26天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
41 5
|
1月前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
2月前
|
Python
Python 中常用的内置模块之`re`模块
【10月更文挑战第11天】 `re` 模块是 Python 内置的正则表达式处理工具,支持模式匹配、搜索、替换等功能。通过 `search`、`match`、`findall` 和 `sub` 等函数,结合正则表达式的元字符、分组、贪婪模式等特性,可高效完成文本处理任务。示例代码展示了基本用法,帮助快速上手。
28 1
|
2月前
|
Python
【收藏备用】Python正则表达式的7个实用技巧
【收藏备用】Python正则表达式的7个实用技巧
26 1
|
2月前
|
数据安全/隐私保护 Python
Python实用正则表达式归纳
Python实用正则表达式归纳
19 3
|
2月前
|
Python
Python 正则表达式高级应用指南
正则表达式是文本模式匹配的强大工具,Python 的 `re` 模块支持其操作。本文介绍正则表达式的高级应用,包括复杂模式匹配(如邮箱、电话号码)、分组与提取、替换操作、多行匹配以及贪婪与非贪婪模式的区别。通过示例代码展示了如何灵活运用这些技巧解决实际问题。
31 7
|
2月前
|
JavaScript 前端开发 Scala
Python学习十:正则表达式
这篇文章是关于Python中正则表达式的使用,包括re模块的函数、特殊字符、匹配模式以及贪婪与非贪婪模式的详细介绍。
18 0
|
2月前
|
数据采集 开发者 Python
Python正则表达式之re.compile函数
`re.compile`是Python正则表达式处理中一个强大的工具,它通过预先编译正则表达式,不仅提升了执行效率,还增强了代码的组织性和可读性。掌握其使用,对于涉及文本分析、数据清洗、日志处理等领域的Python开发者来说,是非常必要的技能。正确并高效地应用这一功能,可以显著提升程序的性能和维护性。
111 0
|
3月前
|
索引 Python
30天拿下Python之正则表达式
30天拿下Python之正则表达式
19 0
|
3月前
|
数据采集 Python
Python正则表达式提取车牌号
Python正则表达式提取车牌号
46 0