123789456ye

已AFO

正则表达式笔记

几次想学但是都没学会……现在作业要用就还是硬着头皮学一下吧
部分材料源于这个
我一开始还不太能理解这怎么配这么多stars,后面才发现stars给的是这个


基本语法

开始和结束两个定位符慎用!用了的话没有就是没有了!

元字符 描述
. 句号匹配任意单个字符除了换行符。
[ ] 字符种类。匹配方括号内的任意字符。
[^ ] 否定的字符种类。匹配除了方括号里的任意字符
* 匹配>=0个重复的在*号之前的字符。
+ 匹配>=1个重复的+号前的字符。
? 标记?之前的字符为可选.
匹配num个大括号之前的字符或字符集 (n <= num <= m).
(xyz) 字符集,匹配与 xyz 完全相等的字符串.
| 或运算符,匹配符号前或后的字符.
\ 转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ |
^ 从开始行开始匹配.
$ 从末端开始匹配.

进阶语法

符号 描述
?= 正先行断言-存在
?! 负先行断言-排除
?<= 正后发断言-存在
?<! 负后发断言-排除

以上没什么好说的


以下是一些python特有的语法
python的修饰符里没有global!害的我瞪了1h才瞪出来(所以我上面没写修饰符,毕竟除了global别的好像没什么用)
但是可以用findall代替就是了

特有语法

|(?:...)|不捕获的分组|
|(?P...)|约定名字的分组|
|(?P=name)|可以引用名字的分组|

一些例子可以去这里,把例子蒯到上面那个网站看看是怎么回事

作业题例

len(re.sub(r'[^A-Za-z]','',s)) #把除字母之外的全部去掉,剩下的就是字母,再统计长度(好怪啊)
res = re.search(r'\d{6}(?P<year>\d{4})(?P<month>\d{2})(?P<day>\d{2})',s) #身份证前六位数字扔掉,后4位捕获后命名为year,……
res.group("year") #调用捕获结果,返回值为字符串
res=re.match(r'(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^\da-zA-Z\s])',s) #密码强度验证,如果没有数字/小写/大写/特殊则会匹配不上,返回None
# 解释可以看这个 https://www.cnblogs.com/tinymad/p/15836480.html
res=re.compile('([a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)+)') #...@...(.xyz) 整体捕获,里面那层捕获用?:消掉
posted @ 2022-10-21 23:33  123789456ye  阅读(34)  评论(0编辑  收藏  举报