正则

一个难题,对于初学者来说正则到底要学习什么? 这里我还是给大家讲解一点规则吧。 讲多了,反而记不住也理解不了。

引用

import re

res = re.findall("l","hello , world")

print(res)

结果

['l', 'l', 'l']

也许这是你见过最不一样的正则 第一课。

上面代码返回了 查找到的3个l 。含义大家都能看懂。 就是在"hello , world"里面查找, 看看有几个"l"

接下来讲规则了。

  • “.” 点代表匹配任何东西(数字,字符串,各种符号)
  • “\d” 代表匹配任意数字
  • “\w” 代表匹配任意数字或者字母

我们来试一下

print(re.findall("o.","good morning"))

结果

['oo', 'or']

从"good morning" 里面寻找 o加上".", 点代表任意字符。 所以 "oo","or" 都被匹配上了。

继续看例子

print(re.findall("\d\d","qq:12345,phone:323"))
print(re.findall("\w\w","qq:12345,phone:323"))
['12', '34', '32']
['qq', '12', '34', 'ph', 'on', '32']

结果,第一个是显示了连续的2个数字, 数字中的12345的5后面没有数字了,所以匹配不成功。 phone 后的e也是。

上面规则是哪些可以匹配,下面是匹配的个数:

  • "*" 可以匹配0个或者多个
  • "+" 可以匹配1个或者多个
  • "?" 可以匹配0个或者1个
print(re.findall(":\d*","qq:12345"))
print(re.findall(":\d*","qq:"))

代表 “:”后面有多少个数字,*,其实有没有都可以把”:” 匹配上。

[':12345']
[':']
print(re.findall(":\d+","qq:12345"))
print(re.findall(":\d+","qq:"))

结果

  • [':12345']
  • []

  • 第二个没有匹配到,因为+ 不支持 0

print(re.findall(":\d?","qq:12345"))
print(re.findall(":\d?","qq:"))
  • [':1'] ? 不匹配多个,只匹配 0或者1
  • [':']

正则规则较多,理解不了的可以多找资料看看