记忆一隅

正则表达式

2020-02-17 · 4 min read
编程

Regular expression

正则表达式是什么

正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。通过使用正则表达式,可以:

  • 测试字符串内的模式。可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码,以数据验证。
  • 替换文本。可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
  • 基于模式匹配从字符串中提取子字符串。可以查找文档内或输入域内特定的文本。

基本的匹配语法字符

以下用Regular expression作为例子

字符 用法 例子
* 匹配前面子表达式0次或多次 es* 匹配 eess
+ 匹配前面子表达式一次或多次 es+匹配esess,但不匹配e
. 匹配除换行符以外的任意字符 .e匹配Rere,表示:任意字符后面跟着一个字母e
? 用来表示前一个字符是可选的,匹配前面的子表达式零次或一次 es?匹配ees,但不匹配ess
^ 检查匹配字符是否是起始字符 ^re匹配regular开头的re,而不匹配expression中的,这个例子我们忽略大小写问题
$ 检查匹配字符是否是最后一个字符 r$匹配regular结尾的r,不匹配其他的r
( ) 按照确切的顺序匹配括号内的字符 (re)只匹配re,不匹配其他
[ ] 匹配方括号中包含的任意字符,无顺序要求 [rR]既匹配大写,也匹配小写
[^ ] 匹配方括号中不包含的任意字符,无顺序要求 [^rR]会匹配到egular expession
{n,m} 匹配括号前字符至少 n 次,但是不超过 m 次 9{2,4}表示匹配至少2位数字但不超过4位的数字9
\ 转义字符,用来将下一个字符转义 \$就是表示原本的符号$

简写匹配字符

可以将较为复杂的匹配语句简写

字符 用法
\w 匹配所有字母和数字的字符: [a-zA-Z0-9_]
\W 匹配非字母和数字的字符: [^\w]
\d 匹配数字: [0-9]
\D 匹配非数字: [^\d]

使用|的或分支功能

和一些语言类似,正则表达式可以使用|来表示或。可以用(r|R)e来实现匹配大小写,或者使用(c|m|f)at来实现同时匹配catmatfat

(c|m|f)at ==> a fat cat sleep at a mat

使用?实现可选匹配

使用(c|m|f)?at来实现同时匹配catmatfatat,即问号前的内容是可不匹配的。

(c|m|f)at ==> a fat cat sleep at a mat

非打印字符匹配表

字符 用法
\f 匹配一个换页符。
\n 匹配一个换行符。
\r 匹配一个回车符。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。注意 Unicode 正则表达式会匹配全角空格符。
\S 匹配任何非空格字符。
\t 匹配一个制表符。
\v 匹配一个垂直制表符。
\b 匹配一个单词边界,即字与空格间的位置。

常用的正则表达式

  • 正数、负数、和小数:(\-|\+)?\d+(\.\d+)?

The number was 9.9997 but we rounded it off to 10 => 9.999710

  • 由26个英文字母组成的字符串: [A-Za-z]+

The number was 9.9997 but we rounded it off to 10 =>Thenumberwasbutweroundeditoffto

  • ……

练习测试工具

菜鸟教程-正则表达式在线测试

我的正则笔记

统计文本/文件内指定关键词的个数

# 统计关键词在文件中的数量
import re
file = open("test.log").read()
erros_res = len(re.findall("error",file))
print(erros_res)

匹配markdown图片

!\[.*\]\((.*)\)