正则表达式笔记
几次想学但是都没学会……现在作业要用就还是硬着头皮学一下吧
部分材料源于这个
我一开始还不太能理解这怎么配这么多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) 整体捕获,里面那层捕获用?:消掉
一切伟大的行动和思想,都有一个微不足道的开始。
There is a negligible beginning in all great action and thought.
There is a negligible beginning in all great action and thought.