re.1常用表达式规则
一、正则表达式的含义
- 定义:即文本的高级匹配模式,提供搜索替换等功能.其本质是一系列由字符和特殊符号组成的字符串,这个字符串即正则表达式
- 匹配原理:由普通的字符和特殊符号构成,通过描述字符的重复,位置,种类等行为达到匹配某一类字符串的目的
- 正则特点:方便处理文本,支持语言众多,使用灵活多样
二、正则语法
- re.findall(pattern,string)
- 功能: 使用正则表达式匹配字符串
- 参数
- pattern 正则表达式
- string 目标字符串
- 返回值 : 返回匹配内容列表
三、正则表达式模式
1. 普通字符
元字符 : a B c
匹配规则: 每个字符匹配对应的自身字符
In [15]: re.findall("ab","abcdaefabcdef")Out[
15]: ["ab", "ab"]In [
16]: re.findall("你好","你好,北京")Out[
16]: ["你好"]
2. 或
元字符 : |
匹配规则: 匹配 | 两边任意一个正则表达式
In [24]: re.findall("ab|cd","abcdef")Out[
24]: ["ab", "cd"]
3. 匹配单个字符
元字符 : .
匹配规则: 匹配除换行外任意一个字符
f.o --> foo fao
In [25]: re.findall("f.o","foo fao")Out[
25]: ["foo", "fao"]
4. 匹配字符串开始位置
元字符 : ^
匹配规则: 匹配目标字符串的开始位置
In [29]: re.findall("^Jame","Jame is a boy")Out[
29]: ["Jame"]
5. 匹配字符串结束位置
元字符 : $
匹配规则: 匹配目标字符串的结束位置
In [32]: re.findall("Jame$","Hi,Jame")Out[
32]: ["Jame"]
6. 匹配重复
元字符 : *
匹配规则: 匹配前面的字符出现0次或多次
fo* --> fooooooooooo f
In [34]: re.findall("fo*","fooooooabceffo")Out[
34]: ["foooooo", "f", "fo"]
7. 匹配重复
元字符: +
匹配规则 : 匹配前面的字符出现1次或多次
fo+ --> fooooooooooo fo
In [37]: re.findall("fo+","fooooooabceffo")Out[
37]: ["foooooo", "fo"]
8. 匹配重复
元字符 : ?
匹配规则 : 匹配前面的字符出现0次或1次
fo? --> f fo
In [43]: re.findall("fo?","fooooooabceffo")Out[
43]: ["fo", "f", "fo"]
9. 匹配重复
元字符 : {n}
匹配规则 : 匹配前面的字符重复指定的次数
fo{3} --> fooo
In [46]: re.findall("fo{3}","fooooooabceffo")Out[
46]: ["fooo"]
10. 匹配重复
元字符 : {m,n}
匹配规则 : 匹配前面的字符出现 m -- n次
fo{2,4} --> foo fooo foooo
In [49]: re.findall("fo{2,4}","fooooooabceffoo")Out[
49]: ["foooo", "foo"]
11. 匹配字符集
元字符: [字符集]
匹配规则: 匹配字符集中任意一个字符
[abc123] --> a b c 1 2 3
[a-z] [A-Z] [0-9]
[$#_a-zA-Z]
In [50]: re.findall("[A-Z][a-z]*","Hi,This is Lua")Out[
50]: ["Hi", "This", "Lua"]
12. 匹配字符集
元字符 : [^...]
匹配规则 : 匹配除指定字符外的任意一个字符
[^abc] --> 除了a b c外任意一个字符
[^a-z]
In [61]: re.findall("[^ ]+","This is a test")Out[
61]: ["This", "is", "a", "test"]
13. 匹配任意(非)数字字符
元字符 : d D
匹配规则:
d 匹配任意一个数字字符 [0-9]
D 匹配任意一个非数字字符 [^0-9]
In [63]: re.findall("d+","2018年就快过去,2019马上到来")Out[
63]: ["2018", "2019"]
14. 匹配任意(非)普通字符
元字符 : w W
匹配规则:
w 匹配普通字符 (数字字母下划线,utf8字符)
W 匹配特殊字符
In [71]: re.findall("w+","PORT#1234,Error 44% 下降")Out[
71]: ["PORT", "1234", "Error", "44", "下降"]
15. 匹配任意(非)空字符
元字符 : s S
匹配规则:
s 匹配任意空字符 [
vf]
S 匹配任意非空字符
In [72]: re.findall("w+s+w+","hello world")Out[
72]: ["hello world"]In [
74]: re.findall("^S+","Terna-123#H xxxxxxx")Out[
74]: ["Terna-123#H"]
16. 匹配字符串开头结尾位置
元字符 : A
匹配规则:
A 匹配字符串开头位置
匹配字符串结尾位置
In [80]: re.findall("Ad+-d+","1000-15000")Out[
80]: ["1000-15000"]
绝对匹配(完全匹配) : 保证正则表达式匹配目标字符串的 全部内容
17. 匹配(非)单词边界
元字符 : B
匹配规则:
匹配单词边界 (普通字符和其他字符的交接)
B 匹配非单词边界
In [85]: re.findall(r"is","This is a boy")Out[
85]: ["is"]In [
86]: re.findall(r"Bis","This is a boy")Out[
86]: ["is"]
18.元字符总结
匹配单个字符: . [...] [^...] d D w W s S
匹配重复: * + ? {n} {m,n}
匹配位置: ^ $ A B
其他: | ()
19.正则表达式的转义
正则特殊符号: . * + ? ^ $ () [] |
正则表达式如果匹配特殊字本身符则需要加
e.g. 匹配字符 . 用 .
目标字符串 正则表达式 字符串
$10 $d+ "$d+"
raw字串: 对字符串不进行转义解析
r"$d+" ==> "$d+"
20.贪婪和非贪婪
贪婪模式: 正则表达式的重复匹配默认总是尽可能多的向后 匹配内容
* + ? {m,n}
非贪婪(懒惰)模式 : 尽可能少的匹配内容
贪婪-->非贪婪 *? +? ?? {m,n}?
In [105]: re.findall(r"ab+?","abbbbbbbbb")Out[
105]: ["ab"]
........待补充
以上是 re.1常用表达式规则 的全部内容, 来源链接: utcz.com/z/530430.html