正则表达式就是记录文本规则的代码。
re是python里的正则表达式模块。findall是其中一个方法,用来按照提供的正则表达式,去匹配文本中的所有符合条件的字符串。返回结果是一个包含所有匹配的list。
r,是raw的意思,它表示对字符串不进行转义,因为python的字符串碰到“\”就会转义它后面的字符。如果你想在字符串里打“\”,则必须要打“\”。
“.”在正则表达式中表示除换行符以外的任意字符
“”在匹配时,会匹配尽可能长的结果。如果你想让他匹配到最短的就停止,需要用“.?”。如“I.*?e”,就会得到第二种结果。这种匹配方式被称为懒惰匹配,而原本尽可能长的方式被称为贪婪匹配。
要表示任意长度的数字,就可以用
[0-9]或者\d
表示的任意长度包括0,也就是没有数字的空字符也会被匹配出来。一个与类似的符号+,表示的则是1个或更长。
如果要限定长度,就用{}代替+,大括号里写上你想要的长度。比如11位的数字:\d{11}
想要再把第一位限定为1,就在前面加上1,后面去掉一位:1\d{10}
\w - 匹配字母或数字或下划线或汉字
\s - 匹配任意的空白符
^ - 匹配字符串的开始
$ - 匹配字符串的结束
\S其实就是\s的反义,任意不是空白符的字符。同理,还有:
\W - 匹配任意不是字母,数字,下划线,汉字的字符
\D - 匹配任意非数字的字符
\B - 匹配不是单词开头或结束的位置
[a]的反义是[^a],表示除a以外的任意字符。[^abcd]就是除abcd以外的任意字符。
*、+、{}来表示字符的重复。其他重复的方式还有:
? - 重复零次或一次
{n,} - 重复n次或更多次
{n,m} - 重复n到m次
正则表达式不只是用来从一大段文字中抓取信息,很多时候也被用来判断输入的文本是否符合规范,或进行分类。例如:^\w{4,12}$
这个表示一段4到12位的字符,包括字母或数字或下划线或汉字,可以用来作为用户注册时检测用户名的规则。
\d{15,18}
表示15到18位的数字,可以用来检测身份证号码
^1\d*x?
以1开头的一串数字,数字结尾有字母x,也可以没有。有的话就带上x。
如果我们确实要匹配.或者*字符本身,而不是要它们所代表的元字符,那就需要用.或*。\本身也需要用\。
比如"\d+.\d+"可以匹配出123.456这样的结果。