记录学习到的相关知识作为日后参考
在线正则表达式测试网站:regex101.com
以该网站为例
一.限定符
1. ?
表示匹配?前面的出现0次到1次的字符
也就意思这个d可有可无,可以匹配use和used
2. *
它将匹配0个或多个字符
在这句话中ab*c意味着匹配ac之间只能出现0个或者多个b,不能出现其他字符
3. +
它将匹配出现1次以上的字符
4. {}
若希望b出现次数,可以在b后面增加一个花括号如ab{6}c
若希望次数为2~6次,则改为ab{2,6}c
若希望次数为2次及以上,则改为ab{2,}c
若希望匹配多个字符则用()将多个字符括起来。如:
二.运算符
1.或运算符 |
如a (cat|dog)这里将先匹配a和一个空格然后匹配括号里的cat或者dog,注意空格必不可少,否则变成a cat或者dog
2.方括号 []
方括号里的内容代表匹配的字符只能来自它们
也可以在方括号指定范围的范围,如[a-z]代表所有的小写字符,[a-zA-Z]代表所有的英文字符,
[a-zA-Z0-9]代表所有的英文字符和数字
3.非运算符 ^ (脱字符)
代表匹配除了^后面列出的所有字符
如[^0-9]代表所有的非数字字符
三.元字符
1. \d 数字字符 等同于[0-9]
2.\w 单词字符(所有英文单词、数字以及下划线)
3.\s 空白符(包含Tab和换行符)
4.\D 非数字字符
5.\W 非单词字符
6.\S 非空白字符
7. 句点. 代表任意字符但不包含换行符
8. ^ 会匹配行首, $ 会匹配行尾 ,比如^a只会匹配行首的a,a$匹配行尾的a
贪婪与懒惰匹配
*+{}在匹配字符串时会尽可能多的匹配字符
如在匹配一个html标签时,<.+>会匹配所有字符包括>字符
只需将其改为<.+?>就可将正则表达式中默认的贪婪匹配变为懒惰匹配
四.python中的正则匹配
具体见:https://www.bilibili.com/video/BV1zK4y1Z75d?p=7&vd_source=c0b93c817937756208a55b9fb682e3e0
1.findall函数
首先正则表达式中用到的是re库,在re库中,findall函数用于匹配你想要找的数据
在findall函数中第一个参数是想要找的内容,第二个参数是在哪里寻找,这里的输出结果以列表形式存储
2.匹配某类内容
匹配单个数字
输出:
匹配单个非数字字符
输出:
3.某些符号的作用
输出:
“+”修饰前面符号,若为\d则匹配一个或者多个数字,若为具体内容如5,则匹配内容中出现的一个或者多个5.类似的还有“?”,匹配0个或者1个字符。“*”表示匹配0个或者多个字符。[]是字符集,匹配其中出现的任意一个字符,如[abc]匹配的字符,该字符可以是 a
、b
或 c
中的任意一个,[\d]匹配的则是任意数字。“.”是统配符,匹配除了换行以外的任意符号
{}用于匹配范围,如\d{4}表示匹配四个数字,\d{1,4}表示匹配1到4个数字,\d{,4}匹配0到4个数字,当数字长度不满足时不会匹配成功
输出:
可以看到这里的163没有成功匹配,而长度大于4的数字串仅匹配前4个数字
| 表示或的关系,代表|前后的情况满足其一即匹配成功,如
输出:
4.限定位置
^用于限定匹配行首, $ 匹配行尾,如下面这种情况
输出:
可以看到因为^的存在,使得正则表达式只匹配了第一个11位数字,注意使用时是形如^a和a$(一个符号在前面,一个符号放后面的)
5.内部约束
具体实现通过捕获组来实现,当你使用正则表达式时,有时你想要匹配的文本的一部分,并对这一部分进行进一步处理或保存。这时就可以使用捕获组。
捕获组是由圆括号 ()
定义的一个子表达式,在正则表达式中,它会将匹配的文本保存到一个特定的位置,以供后续引用或进一步处理。当匹配成功时,捕获组中的内容会被记录下来,可以通过后向引用来引用它们。如:
输出:
更深入的用法是对捕获组的引用
如:
输出:
这个正则表达式中(\w{3})(\1)中的 \1
是反向引用,它表示对正则表达式中第一个捕获组的引用。即第二个捕获组会与第一个捕获组进行比较,若一样才会输出,以此类推,要与第二个捕获组比较则用(\2)。这个正则表达式会匹配任意重复两次的连续三个字母、数字或下划线字符的字符串。例如"abcabc" 或 "123123" 都会匹配。
5.进阶表示
如:
输出: