部分笔记,最近比较懈怠,这篇一直放草稿没有发,这样不行,push一下自己
笔记:
前段时间复习了脑图
来
1. .*? 是一个固定的搭配,.和*代表可以匹配任意无限多个字符,加上?表示使用非贪婪模式进行匹配,也就是我们会尽可能短地做匹配,以后我们还会大量用到 .*? 的搭配。(.*?)代表一个分组,或者说一个捕获组。
在很多搜索中,会用“?”表示任意一个字符,“*”表示任意连续字符,这种被称为通配符。However,在正则表达式中,任意字符是由“.”表示,而“*”表示前面的字符重复0到多次(联想记忆 * 像不像0,代表0到多次),“?”是一种懒惰匹配方式,比如说“.*”会尽可能对前面的字符重复尽可能长的结果,但是“.*?”则会匹配到最短的就停止了,看一个例子
[‘I’m Shirly Hilton. I am his wife’]
用“I.*e”去匹配会得到:
[‘I’m Shirly Hilton. I am his wife’] 匹配了整个句子
用“I.*?e”去匹配会得到:
[‘I’m Shirly Hilton’, ‘ I am his wife’] 尽可能短就结束了
2.反义,表示我要匹配的除了你,谁都可以的情况,比较常见的有下面两种(asfar as I know)
(1)大小写
\b 匹配任意是单词开头或者结束的位置 -- \B 匹配不是单词开头或者结束的位置 --
\d匹配任意数字的字符 -- \D 匹配任意非数字的字符
\w 匹配任意是字母、数字、下划线的字符 -- \W 匹配任意不是字母,数字,下划线的字符
\s 匹配任意的空白符 -- \S 匹配任意不是空白符的字符
(发现了吗,小写匹配任意blahblah的字符,大写和小写对着干)
^ 匹配字符串的开头 -- $ 匹配字符串的结尾
(2)用^来表示反义
[^a]匹配除了a之外的所有
[^abc]匹配除了abc之外的所有
有意思的是用[ ]来匹配其中的一个内容,比如说[Hh]i匹配Hi或者hi,[] -]匹配”
3. re.findall(r’pattern’,string)
这里注意一个r的用法,是raw的意思,它表示对字符串不进行转义,比如说要检索\bhi\b就是用元字符\b检测字符的开头结尾,来匹配hi
$print (“\bhi”)
>hi
$print(r”\bhi”)
>\bhi
看到不同了吗,不加r的话\b就没有了,因为Python字符串碰到“\”会转义它后面的字符。如果想要在字符串里面打“\”,则要打成“\\”,使用一个r的话,表示不要转义字符串中的任何字符,保持原样,简化了字符串。
4. 更多的re模块参考首推官方文档,官方文档可以进行知识补充,较为权威,可以当handbook用
根据最近学习的思维导图,第一步先对re有一个大概的了解吧:正则表达式30分钟入门教程
另外补充对照看这些
这个指南也不错,python正则表达式指南
容易出现的问题:
什么时候使用转义?
在需要检索元字符(metacharacter)的时候需要
补充说明资料:
现在感觉,学习一个东西,就是repeat repeat and repeat,反复到吐,就成功了