【1.72】正则表达式--1

import re

正则表达式 就对字符串 的模糊匹配

字符串  find   split  replace 等都是全匹配

正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。

或者说:正则就是用来描述一类事物的规则。

(在Python中)它内嵌在Python中,并通过 re 模块实现。

正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

 

字符:

  . 匹配除换行符以外的任意字符
  ^ 匹配字符串的开始
  $ 匹配字符串的结束

  \w 匹配字母或数字或下划线或汉字
  \s 匹配任意的空白符
  \d 匹配数字
  \b 匹配单词的开始或结束

次数:

  * 重复零次或更多次
  + 重复一次或更多次
  ? 重复零次或一次
  {n} 重复n次
  {n,} 重复n次或更多次
  {n,m} 重复n到m次

import re

# 元字符点  .  就是通配符  匹配所有  除开\n

str = "nameyaoming123yaoming234yuncang567"

#  findall 就是 找出所有的 匹配  前一个参数是规则 后一个是被匹配的字符串

x = re.findall("yaoming", str)   #这里就是完全匹配
print(x)               #['yaoming', 'yaoming']

y = re.findall("y.....g",str)    #这里是模糊匹配
print(y)             # ['yaoming', 'yaoming', 'yuncang']

#点 . 通配符   元字符   要匹配多少个字符 就要多少个点  
元字符 通配符 点
import re

# 元字符点 ^  只是从开始匹配  匹配不到就是空列表

str = "nameyaoming123yaoming234yuncang567"

y = re.findall("^y.....g",str)    #这里是模糊匹配
print(y)    #[] 什么也没有匹配到

x = re.findall("^n..e...ming",str)
print (x)    #['nameyaoming']
元字符 ^ 从开始匹配
import re

# 元字符点 $  只是匹配最后  匹配不到就是空列表

str = "nameyaoming123yaoming234yuncang567"

x = re.findall("y.....g567$",str)    #这里是模糊匹配
print(x)    #['yuncang567']


str = "nameyaoming123yaoming234yuncang567$"
y = re.findall("y.....g567$",str)    #这里是模糊匹配
print(y)  

#[]   这里是规则里面的 $ 标识从最后匹配  不是用来被匹配的字符
#所以这里的  y 就是空列表
元字符 $ ,从最后匹配
import re

# 元字符点 *  紧挨着的字符 重复(0-无数次) 记住  0 也要算

str = "gggege"
x = re.findall("g*",str)
print(x)

#['ggg', '', 'g', '', '']
#这里 0次匹配也被记录下来

str = "gggege"
y = re.findall("^g*",str)   #这就是g开头,重复0到无数次的
print(y)  #['ggg']
元字符点 * 紧挨着的字符 重复(0-无数次) 记住 0 也要算
import re

# 元字符点 +  紧挨着的字符 重复(1-无数次)
str="123alexxx567"

x = re.findall("alex*",str)
print(x)  #['alexxx']

y = re.findall("alex+",str)
print(y)   #['alexxx']



str="123ale567"

x = re.findall("alex*",str)
print(x)  #['ale']

y = re.findall("alex+",str)
print(y)   #[]
元字符点 + 紧挨着的字符 重复(1-无数次)
import re

# 元字符点 ?  紧挨着的字符 重复(0-1)
str="123alexxx567"

x = re.findall("alex?",str)
print(x)  #['alex']

str="123ale567"

y = re.findall("alex?",str)
print(y)   #['ale']
元字符点 ? 紧挨着的字符 重复(0-1)
import re

# 元字符点 {}  紧挨着的字符 重复
#{0,} == *
#{0,1} == ?
#{1,}== +
#{6}  等于必须重复六次
str="123alexxxx567"

x = re.findall("alex{0,}",str)
print(x)  #['alexxxx']

y =  re.findall("alex{0,1}",str)
print(y)  #['alex']

z =  re.findall("alex{1,2}",str)
print(z)  #['alexx']

a = re.findall("alex{3}",str)
print(a)  #['alexxx']



str="123ale567"
y =  re.findall("alex{0,1}",str)
print(y)   #['ale']
元字符点 {} 紧挨着的字符 重复 次数可选
import re

# 元字符点 *? +? 紧挨着的字符 惰性匹配 就是匹配当前 规则的 最少次

str="123alexxxx67"
y =  re.findall("alex*?",str)
print(y)   #['ale']

y =  re.findall("alex+?",str)
print(y)   #['alex']
元字符点 *? +? 紧挨着的字符 惰性匹配 就是匹配当前 规则的 最少次

 

posted @ 2016-04-22 21:48  科学小怪癖  阅读(111)  评论(0)    收藏  举报