文章目录
- 一.基本介绍
- 二.re模块中的常用方法
- 三.参数flags规则选项总结
- 四.正则表达式模式语法中的特殊元素
- 五.常用操作
- 1.精确指定匹配的次数 { n,m}
- 2.非捕获组 (?:pattern )
- 3.捕获组 (pattern)
- 4.前向界定与后向界定
一.基本介绍
正则表达式又称规范表达式,它是一个用于处理字符串的强大工具,通常被用来检索和替换那些符合规则的文本。Python的re模块提供了对正则表达式的支持。
二.re模块中的常用方法
方法 | 基本解释 |
---|---|
def match(pattern, string, flags=0) | 在字符串开头应用模式,返回匹配对象,如果找不到匹配,则为“无” |
def search(pattern, string, flags=0) | 扫描整个字符串,查找与模式的匹配项,返回一个匹配对象,如果找不到匹配,则为“无” |
def split(pattern, string, maxsplit=0, flags=0) | 按出现的模式拆分源字符串,返回包含结果子字符串的列表。 |
def findall(pattern, string, flags=0) | 扫描整个字符串,查找与模式的匹配项,返回包含结果子字符串的列表 |
def compile(pattern, flags=0) | 编译正则表达式模式,返回模式对象 |
三.参数flags规则选项总结
flags规则 | 基本解释 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 把所有行当成一行匹配 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
四.正则表达式模式语法中的特殊元素
特殊符号 | 基本解释 |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾 |
. | 匹配任意字符,除了换行符 |
[…] | 用来表示一组字符,比如:[abc] 匹配 ‘a’,‘b’或’c’ |
[^…] | 不在[]中的字符:比如:[^abc] 匹配除了a,b,c之外的字符 |
* | 匹配0个或多个的表达式 |
+ | 匹配1个或多个的表达式 |
? | 匹配0个或1个由前面的正则表达式定义的片段,惰性匹配方式 |
{ n,} | 精确匹配n个到多个表达式 |
{ n, m} | 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪匹配方式 |
a|b | 匹配a或b |
(re) | 匹配括号内的表达式,也表示一个组 |
\w | 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。 |
\W | 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。 |
\s | 匹配任意空白字符,等价于 [\t\n\r\f] |
\S | 匹配任意非空字符 |
\d | 匹配任意数字,等价于 [0-9] |
\D | 匹配任意非数字 |
\A | 匹配字符串的开头。它和 ’^’ 的区别是, ’/A’ 只匹配整个字符串的开头,即使在 ’M’ 模式下,它也不会匹配其它行的行首 |
\Z | 匹配字符串的结尾。它和 ’$’ 的区别是, ’/Z’ 只匹配整个字符串的结尾,即使在 ’M’ 模式下,它也不会匹配其它各行的行尾 |
\z | 匹配字符串结束 |
\G | 匹配最后匹配完成的位置 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’ |
\B | 匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’ |
\n, \t, 等 | 匹配一个换行符。匹配一个制表符等 |
五.常用操作
1.精确指定匹配的次数 { n,m}
{ n,m}符号就可以控制匹配次数,表示匹配n位到m位的字符串
{n,} 表示匹配n位以上的字符串
{,m} 表示匹配m位以下的字符串
Python正则表达式前的 r 表示原生字符串(rawstring),该字符串声明了引号中的内容表示该内容的原始含义,避免了多次转义造成的反斜杠困扰。
代码演示
2.非捕获组 (?:pattern )
(?:pattern )表示匹配pattern,但不捕获匹配结果。
3.捕获组 (pattern)
(pattern)表示匹配pattern并捕获结果
4.前向界定与后向界定
有时候需要匹配某个内容或者某个内容之前的内容,比如str = “love中国China” 匹配中国二字就在love之后,China之前。
Python 提供一个简便的前向界定和后向界定功能,或者叫前导指定和跟从指定功能。它们是:
(?<=…) 前向界定
括号中 … 代表你希望匹配的字符串的前面应该出现的字符串。
(?=…) 后向界定
括号中的 … 代表你希望匹配的字符串后面应该出现的字符串。
前向界定和后向界定同时使用
前向界定单独使用
后向界定单独使用