正则表达式

正则表达式

由普通字符以及特殊字符组成的文字模式

1 基本语法及使用

(1)例子
如要找出文档里的所有we单词,如果直接输入we可能会把well,wet等也匹配进来
但如果加上\bwe\b则可以解决这个问题,这是因为\b是一个特殊的元字符,代表单词的开头或结尾

(2)常用元字符
元字符的四种作用:匹配字符、匹配位置、匹配数量和匹配模式。

常见元字符
. 匹配除换行符以外的任意字符
\b 匹配单词的开始或结束
\d 匹配数字
\w 匹配字母、数字、下划线或汉字
\s 匹配任意空白符,包括空格、制表符、换行符、中文全角空格等
^ 匹配字符串的开始
$ 匹配字符串的结束

eg:匹配所有以s开头的单词可以用:"\bs\w*\b",以s开头的字符串可用"^\s\w*$"

(3)字符转义
用于查找特殊字符时,可用”\“来取消特殊字符的特殊意义
eg:①查找“.”,“\”时,可以写成“.”,“\”
②查找“www.baidu.com”时可用“www.baidu.com”来查找

(4)重复

常用限定符
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

eg:
①hello\d+:匹配hello后面跟1个或更多数字,例如hello1或者hello10等情况
②^\d{5,12}$:匹配5到12个数字的字符串,例如QQ号

③^\d{11}$:匹配11个数字的字符串,例如电话号码,身份证号码,学号等也可类似
④word\d?:匹配word后面更0个或1个数字的情况。

(5) 字符集合
自定义字符集合:通过[]来实现
eg:①[abcde]是匹配abcde中的任意一个字符,[.?!]匹配.?!中的任意一个
②指定范围的[0-9]等价\d,[a-z0-9A-Z]等价于\w

(6)分支条件
指正则表达式里面有几种匹配条件,满足其中任意一种都应该匹配,具体方法是"|"把不同的规则分隔开。
同时需要注意的是,匹配条件时,将会从左到右的测试每个条件,如果满足了某一个条件就不管其他条件。
eg:匹配电话号码时,电话号码一种是:三位区号-八位本地号,四位区号-七位本地号;
可用0\d{2}-\d{8}|0\d{3}-\d{7}进行匹配

(7) 分组
以写出一个IP地址表达式为例。
eg:①((\d{1,3}).){3}\d{1,3}。这个可能匹配出333.444.555.666之类的不存在的地址,故需要改进
②((25{0-5}|2{0-4}{0-9}|[0-1]\d{2}|[1-9]?\d).){3}(25{0-5}|2{0-4}{0-9}|[0-1]\d{2}|[1-9]?\d)

(8) 反义

\B 匹配不是单词的开始或结束
\D 匹配任意非数字的字符
\D+ 匹配非数字的一个或多个字符
\W 匹配任意不是字母、数字、下划线或汉字的字符
\S 匹配任意不是空白符(括空格、制表符、换行符、中文全角空格等)的字符
{^a} 匹配除了a以外的任意字符
{^abcde} 匹配除了abcde以外的字符

(9) 后向引用
使用小括号指定一个表达式就可以看做一个分组。以分组的左括号为标志,第一个出现分组的组号为一,第二个为2。
也可以自定义子表达式的组名,使用(?\d+)或者(?‘Digit’\d+),就把"\d+"的组名指定为Digit了。要反向引用这个组捕获的内容,可以使用\k

捕获
(exp) 匹配exp,并捕文本到自动命名的组里
(?exp) 匹配exp,并捕获文本到名称为name的组里,也可写成(?'name’exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号

(10) 零宽断言

(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(? 匹配前面不是exp的位置

(11) 注释

(?#comment) 不对正则表达式的处理产生任何影响,只用于提供注释

eg:\b\w+(?#字符串)\b

你可能感兴趣的:(笔记,正则表达式,python)