文章目录
- 常见正则表达式
- 使用正则表达式的步骤
正则表达式,简称 regex ,是文本的一种描述方法。
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要,正则表达式就是用于描述这些规则的工具,换句话说正则表达式是一种工具,它定义了字符串的匹配模式(如何检查一个字符串是否有跟某种模式匹配的部分或者从一个字符串中将与模式匹配的部分提取出来或者替换掉)。
例如,d 是一个正则表达式,表示一位数字字符,即任何一位 0 到 9 的数字。
常见正则表达式
符号 | 解释 | 示例 | 说明 |
---|---|---|---|
. | 匹配任意字符 | b.t | 可以匹配bat / but / b#t / b1t等 |
w | 匹配字母/数字/下划线 | bwt | 可以匹配bat / b1t / b_t等 但不能匹配b#t |
s | 匹配空白字符(包括r、n、t等) | lovesyou | 可以匹配love you |
d | 匹配数字 | dd | 可以匹配01 / 23 / 99等 |
b | 匹配单词的边界 | bTheb | |
^ | 匹配字符串的开始 | ^The | 可以匹配The开头的字符串 |
$ | 匹配字符串的结束 | .exe$ | 可以匹配.exe结尾的字符串 |
W | 匹配非字母/数字/下划线 | bWt | 可以匹配b#t / b@t等 但不能匹配but / b1t / b_t等 |
S | 匹配非空白字符 | loveSyou | 可以匹配love#you等 但不能匹配love you |
D | 匹配非数字 | dD | 可以匹配9a / 3# / 0F等 |
B | 匹配非单词边界 | BioB | |
[] | 匹配来自字符集的任意单一字符 | [aeiou] | 可以匹配任一元音字母字符 |
[^] | 匹配不在字符集中的任意单一字符 | [^aeiou] | 可以匹配任一非元音字母字符 |
* | 匹配0次或多次 | w* | |
| 匹配1次或多次 | w | |
? | 匹配0次或1次 | w? | |
{N} | 匹配N次 | w{3} | |
{M,} | 匹配至少M次 | w{3,} | |
{M,N} | 匹配至少M次至多N次 | w{3,6} | |
| | 分支 | foo|bar | 可以匹配foo或者bar |
(?#) | 注释 | ||
(exp) | 匹配exp并捕获到自动命名的组中 | ||
(?exp) | 匹配exp并捕获到名为name的组中 | ||
(?:exp) | 匹配exp但是不捕获匹配的文本 | ||
(?=exp) | 匹配exp前面的位置 | bw (?=ing) | 可以匹配I’m dancing中的danc |
(?<=exp) | 匹配exp后面的位置 | (?<=bdanc)w b | 可以匹配I love dancing and reading中的第一个ing |
(?!exp) | 匹配后面不是exp的位置 | ||
(?<!exp) | 匹配前面不是exp的位置 | ||
*? | 重复任意次,但尽可能少重复 | a.b a.?b | 将正则表达式应用于aabab,前者会匹配整个字符串aabab,后者会匹配aab和ab两个字符串 |
? | 重复1次或多次,但尽可能少重复 | ||
?? | 重复0次或1次,但尽可能少重复 | ||
{M,N}? | 重复M到N次,但尽可能少重复 | ||
{M,}? | 重复M次以上,但尽可能少重复 |
使用正则表达式的步骤
- import re 导入正则表达式模块
- 用 re.compile() 函数创建一个 Regex 对象(记得使用原始字符串)
- 向 Regex 对象的 search() 方法传入想要查找的字符串。它返回一个 March 对象。
- 调用 March 对象的 group() 方法,返回实际匹配文本的字符串。
正则表达式测试网站: http://regexpal.com/
利用正则表达式查找电话号码:
代码语言:javascript复制>>> import re
>>> phoneNumRegex = re.compile (r'ddd-ddd-dddd') #创建Regex对象(使用原始字符串,简化书写)
>>> mo = phoneNumRegex.search ('My number is 515-345-7890') #利用search方法传入想要查找的字符串
>>> print('Phone number found :' mo.group ()) #调用 March 对象的 group() 方法,返回实际匹配文本的字符串
Phone number found :515-345-7890
- 向 re.compile() 传入一个字符串值,该字符串表示正则表达式,它将返回一个 Regex 模式对象。
- Regex 对象的 search() 方法查找传入的字符串,寻找正则表达式的所有匹配。没有找到,search() 返回 None 。找到,search() 方法返回一个 March 对象。
- March 对象有个 group() 方法,它返回被查找字符串中实际匹配的文本。
参考文献
[1]:https://github.com/jackfrued/Python-100-Days [2]:Python编程快速上手:让繁琐工作自动化/ (美)斯维加特(A1 Sweigart) 著;王海鹏译.北京:人民邮电出版社,2016.7 [3]:Python 中文指南;作者:王炳明,版本:v1.0