Regular_Expression

正则表达式概念

​ 正则表达式是对字符串操作的一种逻辑公式,是用事先定义好的一些特定字符、及这些特定字符的组合,组成一种规则字符串,从而表达一种过滤逻辑。在程序设计中,通常使用正则表达式来检索和替换那些符合某种规则(模式)的文本。

python编译正则表达式

使用python编译正则表达式时,需要引入re模块,此时可以使用正则表达式的所有功能
1. re.compile(parttern[, flags])
将正则表达式进行编译,从而使用其所有的功能,返回RegexObject对象

2. re.match(pattern, string, flags=0)
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match就范围none

3. re.search(pattern, string, flags=0)
扫描整个字符串并返回第一个成功的匹配。

4. re.sub(pattern, repl, string, count=0, flags=0)
替换字符串中的匹配项

5. re.compile().findall(string[, pos[, endpos]])
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表

6. re.split(pattern, string[, maxsplit=0, flags=0])
按照匹配的子串将字符串分割后返回列表

7. re.compile().match().group()
group参数为0时返回得到的结果,否则为第n个子串

参数 描述 备注
pattern 正则表达式 pattern = r’sa{1,2}s’
string 目标字符串 string = r’saas sas ssaads ssas’
flags 匹配模式,如大小写等
repl 替换的字符串 可以为一个函数
count 模式匹配后替换的最大次数 默认0表示替换所有
pos 起始位置
endpos 结束位置
maxsplit 分割次数 默认0为不限制次数

简洁正则表达式

正则表达式 匹配字符
[0-9] 0123456789任意之一
[a-z] 任意小写字母
[A-Z] 人以大写字母
\d 等同于[0-9]
\D 等同于[^0-9]
\w 等同于[a-z0-9A-Z_],匹配大小写字母数字和下划线
\W 等同于[^a-z0-9A-Z_]
\s 任何空白字符,包括空格、制表符、换页符等,[ \f\n\r\t\v]
\S 任何非空白字符,[^ \f\n\r\t\v]

正则表达式元字符

元字符 匹配规则 示例
[] 匹配括号中任意一个字符 [adegS]
[^] 匹配括号内字符外都能匹配 [^fda]
. 匹配任意一个字符,需要匹配该符号时使用\转义 .
+ 前一个字符重复1次或多次,尽可能贪婪地多匹配 a+
? 前一个字符出现0次或1次, a?
+? 前一个字符重复1次或多次,将贪婪转为懒惰 fds+?f
* 前一个字符重复0次或多次,*?同理 a*
{a, b} a<=前一个字符匹配次数<=b;b省略逗号保留表示至少;逗号和b一同省略表示准确数目 a{1,2}s
| 逻辑或操作符 a|b
- 定义一个区间 a-c
\ 对下一个字符取非(通常是转义作用)
^ 匹配字符串的开头 ^a
$ 匹配字符串的结束 a$
{\b] 退格字符
\c 匹配一个控制字符
\t 匹配一个制表符

正则表达式修饰符——可选标志

修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别匹配
re.M 多行匹配,影响^和$
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符,影响\w \W \b \B
re.X 给予灵活的格式,以便将正则表达式写得更加易于理解

python练习

题目:在字符串sysu@hotmail.edu.cn中匹配出@hotmail.

示例代码1(错误示例)

1
2
3
4
5
6
# 错误使用贪婪匹配,导致输出结果为@hotmail.edu.
import re
key = r"sysu@hotmail.edu.cn"
p1 = r"@.+\."
pattern1 = re.compile(p1)
print(partten1.findall(key))

示例代码2——懒惰匹配

1
2
3
4
5
import re
key = r"sysu@hotmail.edu.cn"
p1 = r"@.+?\."
pattern1 = re.compile(p1)
print(partten1.findall(key))

示例代码3——非懒惰匹配

1
2
3
4
5
import re
key = r"sysu@hotmail.edu.cn"
p1 = r"@[^\.]+\."
pattern1 = re.compile(p1)
print(partten1.findall(key))

0%