python入门(五) —— 正则表达式 re
正则表达式(Regular Expression)是字符串处理的常用工具,在文本匹配、检索、替换中起到很重要的作用。
本文从以下两个方面介绍正则表达式:
re语法
re使用方式
语言:python
概念
正则表达式(Regular Expression)是字符串处理的常用工具,通常被用来检索、替换那些符合某个模式(Pattern)的文本
通常,以正则表达式的语法写出表达式,经过编译之后,用于文本匹配、查找。
语法
摘自链接
注意:
字符一栏,如果单独使用,则只匹配一个字符。如果要匹配多个字符,需和数量词一起使用。
如果要匹配某个词本身,则直接写这个词本身即可。如:匹配
abc
, 则直接r'abc'
即可
实例
字符类
实例 | 描述 |
---|---|
[Pp]ython | 匹配 “Python” 或 “python” |
rub[ye] | 匹配 “ruby” 或 “rube” |
[aeiou] | 匹配中括号内的任意一个字母 |
[0-9] | 匹配任何数字。类似于 [0123456789] |
[a-z] | 匹配任何小写字母 |
[A-Z] | 匹配任何大写字母 |
[a-zA-Z0-9] | 匹配任何字母及数字 |
[^aeiou] | 除了aeiou字母以外的所有字符 |
[^0-9] | 匹配除了数字外的字符 |
特殊字符类
实例 | 描述 |
---|---|
. | 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。 |
\d | 匹配一个数字字符。等价于 [0-9]。 |
\D | 匹配一个非数字字符。等价于 [^0-9]。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\w | 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。 |
\W | 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。 |
注意:
[]
:方括号。匹配需要的字符集合,如[1-3]
或[123]
都是匹配1、2或者3。()
:圆括号。匹配需要的字符串集合。如(abc|edf)
可以匹配abc或edf。^
:方括号中加入这个符号,就是匹配未列出的所有其他字符,如[^a]
匹配除a以外的所有其他字符。\
: 反斜杠。和python字符串使用规则一样,可以匹配特殊字符本身,如\d
表示匹配0到9的任意一个数字字符,而\\d
则表示匹配\d
本身。*
:星号。匹配前一个字符0到n次,如pytho*n
可以匹配pythn、pytoon、pythooooon等。还有其它匹配重复字符的如?、+或{m,n},其中{n,m}可以灵活使用,它表示匹配n次到m次。贪婪模式与非贪婪模式:
- 贪婪:总是尝试匹配尽可能多的字符
- 非贪婪:总是匹配尽可能少的字符
- 例如,用”ab*“查找”abbbc”,将找到”abbb”。而如果使用非贪婪的数量词”ab?”,将找到”a”
使用方法
编译
1 | import re # 引入python中的re包。这里用到的是python3 |
可以看到,compile后面跟了两个参数。第一个参数是要匹配的正则表达式,第二个参数是匹配模式。
匹配模式:
注: 在下文中用flag
来表示
re.I (re.IGNORECASE):忽略大小写
re.M (MULTILINE):多行模式,改变’^’和’$’的行为
re.S (DOTALL): 点任意匹配模式,改变’.’的行为,使其可以匹配包括
\n
在内的字符re.L (LOCALE):使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
re.U (UNICODE):使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
re.X (VERBOSE):详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。
匹配
编译好了之后就可以使用了
查找
regex.findall(string[, pos[, endpos\]]
1 | # 编译模式,提取所有数字 |
匹配
regex.match(string[, pos[, endpos]])
1 | pattern = re.compile(r'bel*a\b') |
搜索
regex.search(string[, pos[, endpos\]])
1 | pattern = re.compile(r'bel*a\b') |
修改
分割
regex.split(string, maxsplit=0)
1 | pattern = re.compile(r'\d*') |
替换
regex.sub(repl, string, count=0)
1 | pattern = re.compile(r'bella') |
参考链接: