pattern 正则表达式模式字符串
实例 | 描述 |
---|---|
^ | 匹配开头 |
$ | 匹配末尾 |
. | 匹配任意字符,除了换行 |
[amk] | 方括号内,匹配其中任意 此处为匹配‘a’,‘m’,'k’任意一个 |
[^amk] | 方括号内,前面加^,匹配除‘a’,‘m’,'k’的其它任意字符 |
re* | 匹配0个或多个表达式 |
re+ | 匹配1个或多个表达式 |
re? | 匹配0个或多个表达式 例如‘’1010001 ‘.?1’匹配的是101,而’.*1’匹配1010001 |
re{n} | 匹配n个表达式 |
a | b |
(re) | 匹配re 并成组,即group()中的的组 |
\s | 匹配空字符串,等价 [\t\n\r\f] |
\S | 匹配非空字符串 |
\d | 匹配任意数字 [0-9] |
\D | 匹配非数字 |
[a-zA-Z0-9] | 匹配任意数字及字母 |
函数
re.match(pattern, string, flags=0)
函数 | 描述 |
---|---|
re.match(pattern, string, flags=0) | 从起始位置开始匹配 |
re.search(pattern, string, flags=0) | 扫描并返回第一个匹配成功的 |
re.findall(pattern, string, flags=0) | 扫描并返回所有符合的 形成列表 |
re.re.sub(pattern, repl, string, count=0, flags=0) | pattern : 正则中的模式字符串。;repl : 替换的字符串,也可为一个函数。;string : 要被查找替换的原始字符串。;count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。;flags : 编译时用的匹配模式,数字形式。 |
例子
摘抄至菜鸟教程
"对于serch和match 用group()"
line = "Cats are smarter than dogs"
searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)
if searchObj:
print ("searchObj.group() : ", searchObj.group())
print ("searchObj.group(1) : ", searchObj.group(1))
print ("searchObj.group(2) : ", searchObj.group(2))
# out
earchObj.group() : Cats are smarter than dogs
searchObj.group(1) : Cats
searchObj.group(2) : smarter
例子记录
- 匹配log文件所有的数值
例如2021-09-07 15:51:42,301 letter_train.py[line:229] INFO: Epoch:0 Train accuracy: 48.68%(37/76) true:100.00%(37/37) fake:0.00%(0/39) Test accuracy: 45.16%(14/31) true:100.00%(14/14) fake:0.00%(0/17)
这里面的Epoch数 和所有的%号前的数字pattern = re.compile(r'.*INFO: Epoch:(\d*)\s*Train accuracy:\s*([\d\\.]*)%.*true:\s*([\d\\.]*)%.*fake:\s*([\d\\.]*)%.*Test accuracy:\s*([\d\\.]*)%.*true:\s*([\d\\.]*)%.*fake:\s*([\d\\.]*)%.*') pattern.match("2021-09-07 15:51:42,301 letter_train.py[line:229] INFO: Epoch:0 Train accuracy: 48.68%(37/76) true:100.00%(37/37) fake:0.00%(0/39) Test accuracy: 45.16%(14/31) true:100.00%(14/14) fake:0.00%(0/17)").groups() Out[27]: ('0', '48.68', '100.00', '0.00', '45.16', '100.00', '0.00')