活动地址:CSDN21天学习挑战赛
学习日记
一,正则表达式基础内容
1,语法大全
模式 描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾。 . 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。 [...] 用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’ [^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 re* 匹配0个或多个的表达式。 re+ 匹配1个或多个的表达式。 re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 re{n} 匹配n个前面表达式。例如,"o{2}“不能匹配"Bob"中的"o”,但是能匹配"food"中的两个o。 re{ n,} 精确匹配n个前面表达式。例如,"o{2,}“不能匹配"Bob"中的"o”,但能匹配"foooood"中的所有o。"o{1,}“等价于"o+”。"o{0,}“则等价于"o*”。 re{ n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 `a b` (re) 匹配括号内的表达式,也表示一个组 (?imx) 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。 (?-imx) 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。 (?: re) 类似 (…), 但是不表示一个组 (?imx: re) 在括号中使用i, m, 或 x 可选标志 (?-imx: re) 在括号中不使用i, m, 或 x 可选标志 (?#...) 注释. (?= re) 前向肯定界定符。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。 (?! re) 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功。 (?> re) 匹配的独立模式,省去回溯。 \w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]'。 \W 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。 \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 \d 匹配任意数字,等价于 [0-9]。 \D 匹配一个非数字字符。等价于 [^0-9]。 \A 匹配字符串开始 \Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。 \z 匹配字符串结束 \G 匹配最后匹配完成的位置。 \b 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。 \B 匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。 \n, \t, 等。 匹配一个换行符。匹配一个制表符, 等 \1...\9 匹配第n个分组的内容。 \10 匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。
2,修饰符-可选标志
修饰符 描述 re.I
使匹配对大小写不敏感 re.L
做本地化识别(locale-aware)匹配 re.M
多行匹配,影响 ^ 和 $ re.S
使 .
匹配包括换行在内的所有字符re.U
根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. re.X
该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
3,运算优先级
运算符 描述 \
转义符 (), (?:), (?=), []
圆括号和方括号 *, +, ?, {n}, {n,}, {n,m}
限定符 ^, $, \任何元字符、任何字符
定位点和序列(即:位置和顺序) ` `
二,python中使用 import re
1,import re 模块常用的方法总结
方法名 用途 参数说明 返回值 re.findall 在字符串中找到正则表达式所匹配的所有子串 re.findall(pattern, string, flags=0) 参数: pattern 匹配字符串的正则。 string 待匹配的字符串。 列表 re.sub() 将匹配到的结果替换成指定的内容 re.sub(pattern, repl, string, count=0, flags=0)
参数:
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
放回替换后的内容 re.compile() 编译正则表达式,如果正则表达式的字符串本身不合法,会报错 re.compile(pattern[, flags])
参数:
pattern : 一个字符串形式的正则表达式
flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,正则表达式 re.match() match方法尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none re.match(pattern, string, flags=0) # pattern 匹配的正则表达式 # string 要匹配的字符串 # flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等 MatchObject
None
re.search() 扫描整个字符串并返回第一个成功的匹配 参数 pattern 匹配的正则表达式 string 要匹配的字符串。 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等 re.split() 按照能够匹配的子串将字符串分割 re.split(pattern, string[, maxsplit=0, flags=0])
参数
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
列表
2,import re 模块个方法的使用
re.compile
re.findall
import re
s = re.compile('/0')
a = '2020/08/02'
result = re.findall(s ,a)
print(type(result))
print(result)
运行结果如下 :
<class 'list'>
['/0', '/0']
进程已结束,退出代码0
代码解释: re.compile('/0')用来定义一个 '/0'的正则表达式。 re.findall(s ,a) 从变量a中比配'/0'将所有的匹配结果放到列表中
re.compile()
import re
s = re.compile('/0')
a = '2020/08/02'
d = re.sub(s,'|0',a)
print(a )
print(d)
运行结果如下 :
2020/08/02
2020|08|02
进程已结束,退出代码0
将变量中的'/0'字样替换成‘|0’。
er.match()
import re
s = re.compile('/0')
a = '2020/08/02'
d = re.match(s,a,0)
print(a )
print(d)
运行结果如下 :
2020/08/02
None
进程已结束,退出代码0
re.match需要从起始位置开始匹配,上级代码起始位置不存在正则的内容因此返回结果是None
import re
s = re.compile('/0')
a = '/02020/08/02'
d = re.match(s,a,0)
print(a )
print(d)
运行结果如下 :
/02020/08/02
<re.Match object; span=(0, 2), match='/0'>
进程已结束,退出代码0
re.search():
import re
s = re.compile('/0')
a = '2020/08/02'
d = re.search(s,a,0)
print(a )
print(d)
运行结果如下 :
2020/08/02
<re.Match object; span=(4, 6), match='/0'>
进程已结束,退出代码0
re.split():
import re
s = re.compile('/0')
a = '2020/08/02'
d = re.split(s,a,0)
print(a )
print(d)
运行结果如下 :
2020/08/02
['2020', '8', '2']
进程已结束,退出代码0