2.7 - 正则表达式
2.7.1 正则表达式 - 普通字符及正则方法
import re # 正则表达式 - 普通字符 string = 'hello world rld' p = re.compile('rld') # 编译正则表达式,返回Pattern实例对象
m = p.search(string) # 寻找字符串中 第一个 符合规则的子串 print(isinstance(m, re.Match), m) n = p.match(string, 6, 9) # 从pos指定的下标位置开始匹配(参数默认0),如果指定下标位置匹配不上就返回None print(n) k = p.fullmatch(string, 3, 5) # 整个字符串完全匹配 print(k) # 对于普通字符而言,只能是 表达式和字符串相同才可以,一般用来匹配元字符规则 x = p.findall(string, 2, 1) # 获取所有匹配成功的,返回一个列表 print(x)
2.7.2 正则表达式 - 特殊字符(元字符)
正则表达式,不论是普通字符还是元字符,不要随便加空格,因为在匹配的时候,空格也会被看作匹配规则的一部分!!!
""" . 除换行符(\n)之外的任意一个字符 . 编译模式(re.compile(pattern, flags=re.S))下的 . ,可以匹配包含换行符(\n)在内的任意一个字符 ^ 字符串开头,多行模式下(re.compile(pattern,flags=re.M)),换行符也当作开头 $ 字符串结尾,多行模式下,换行符也当作结尾 * 对前面的正则表达式 [0,+∞) 次贪婪重复匹配 + 对前面的正则表达式 [1,+∞) 次贪婪重复匹配 ? 对前面的正则表达式 [0, 1] 次贪婪重复匹配 {m} 对前面的正则表达式 m 次重复匹配 {m,n} 对前面的正则表达式 [m, n] 次贪婪重复匹配 ---上述5个都是贪婪的,能匹配多少就匹配多少 ---上述5个后面加上?,贪婪 =》非贪婪 | 或,分支结构,'cat|dog':匹配的是 cat和dog,不是 catog和cadog。 \ 转义字符 \b 匹配字符串的边界. 所谓边界:isalnum为True的都不是边界 \B 匹配字符串的非边界, \d 匹配数字字符 \D 匹配非数字字符 \s 匹配任意一个空白符(空格,换行\n,制表符\t) \S 匹配任意一个非空白符 \w 匹配任意一个 (数字 字母 下划线) 等价于 [a-zA-Z0-9] \W 匹配任意一个非 (数字 字母 下划线) \Z 只匹配末尾且不接收换行模式;$匹配末尾或末尾的\n,且识别 换行模式re.M """
2.7.3 元字符 之 字符组
[...] 字符组,可匹配其中任意一个字符。在字符组中,只有 - 和 ^ 和 转义字符 才可能是元字符,其它的如 + ? . 等都是普通字符。
[ - ] 连字符,表示一个范围,如:[a-zA-Z0-9],表示任意一个 大小写字母或数字
[^...] 排除字符,如:[^a-zA-Z] ,表示:匹配 非大小写字母 的字符
字符集内,除了元字符,其余普通字符表达的含义都是 或,而字符集外的普通字符,表达的含义是:当前是且接下来是。
2.7.4 环视
匹配前缀,匹配后缀和寻找重复的单词
2.7.5 分组和捕获
1) 分组的初始化
a. 直接用圆括号 (exp) ,第一个分组编号为1,第二个分组编号为2,... 。整个正则表达式的分组编号是0。
b. 定义分组并命名 (?P<name>exp) ,分组的同时也会分配分组编号。
c. 非捕获分组 (?: exp) ,只负责匹配文本,既没有分组名,也没有分组编号,也不能被引用。
2)引用分组
引用分组是对前面匹配到的文本进行重复匹配,不是匹配规则!!!
可以通过分组名称:(?P=name) 或 分组编号:\编号 来引用分组。注:非捕获分组既没有名称,也没有编号,因此,不能被引用。
2.7.6 正则表达式的方法
1)findall
对于非捕获分组,findall方法,会返回所有匹配到的文本的列表。
>>> re.findall(r'(\d{3,4}-)?(\d{7,8})','020-82228888\n0357-4227865') [('020-', '82228888'), ('0357-', '4227865')]
对于捕获分组,findall()方法,会返回一个元组列表,每个元组的组成元素是,每个子分组匹配到的内容。
>>> re.findall(r'(?:\d{3,4}-)?\d{7,8}','020-82228888\n4227865') ['020-82228888', '4227865']
2)sub 将正则匹配到的文本进行替换
p = re.compile(r'blue|red|yellow|green') x = p.sub('color', "the flower's color including red, blue, green.") print(x) # 结果:the flower's color including color, color, color.
Reference:
https://www.cnblogs.com/ljhdo/p/4847209.html

浙公网安备 33010602011771号