正则表达式是用来避免重复工作,处理有规律信息的一个有力工具
import re
text = "Hi, I am Shirley Hilton. I am his wife."
m = re.findall(r"hi", text)
if m:
print (m)
else:
print ('not match')
这是一个小实验,通过它来看,我们不难看出这是在通过某种方法寻找"Hi, I am Shirley Hilton. I am his wife."这段话中的"hi"通过这个我们发现会有两个结果,都是hi,分别来自于Shirly与his俩单词,由此我们看出,正则表达式是严格的,区分大小写的,Hi并不满足要求。
当然,不仅仅有这样的查找,也可以仅仅找部分的,比如只匹配“Hi”,在这段话中只想要计数一次,那么我们可以采用"\bHi\b"的查找对象,这样就能仅仅匹配单独的Hi啦。
“\b”在正则表达式中表示单词的开头或结尾,空格、标点、换行都算是单词的分割。而“\b”自身又不会匹配任何字符,它代表的只是一个位置。所以单词前后的空格标点之类不会出现在结果里。
然后[]符号的作用也很大,它的作用是表示满足括号中任一字符,例如我们想要Hi也想要hi,就可以[Hh]i
r
接下来继续解释这个小试验中的内容,在语句传参时的r的含义,为什么要加r?
r,是raw的意思,它表示对字符串不进行转义。例如:
>>> print ("\bhi")
hi
>>> print (r"\bhi")
\bhi
re
re是python里的正则表达式模块。findall是其中一个方法,用来按照提供的正则表达式,去匹配文本中的所有符合条件的字符串。返回结果是一个包含所有匹配的list。
特殊字符
这里介绍
. | 除换行符以外的任意字符 |
\S | 不是空白符的任意字符 |
***** | 表示前面的字符可以重复任意多次(包括0次) |
+ | 表示前面的字符可以重复任意多次(不包括0次) |
{} | 表示指定长度 |
[] | []内任意字符 |
\w | **匹配字母或数字或下划线或汉字 ** |
\d | 匹配数字 |
\s | 匹配空白符 |
**^ ** | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
? | 重复零次或一次(懒惰匹配) |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
很容易猜想到,如\s\S这样大小写的区分就是正反的区别,由此推出各个对应的相反,此外,[]内通过加就代表除此符号外任意字符
.* | 贪婪匹配 |
*? | 懒惰匹配 |