正则表达式(regular)知识(整理)(3)

['d', 'd', 'a', 'd', 'f', 'a', 'd', 'f', 'a', 'f', 'd', 'a', 'f', 'd', 'a', 'd', 'f', 'a', 's', 'f', 'd', 'a', 'f', 'a', 'f',   'd', 'a'] (1)   ['1', '2', '3', '2', '4', '6', '4', '6', '5', '1', '6', '4', '8', '1', '5', '6', '4', '1', '2', '7', '1', '1', '3', '0', '0',   '2', '5', '8'] (2) [] (3)

上面代码运行结果(1)处匹配了所有的字符串,单个匹配;(2)处匹配了字符串中的数字,返回到一个列表中;(3)处匹配不存在的情况,返回一个空列表。

重点:(1)匹配不到的时候返回一个空的列表;(2)如果没有指定匹配次数,则只单个匹配。

    (8)finditer(pattern,string,flags=0)

def finditer(pattern, string, flags=0):     """Return an iterator over all non-overlapping matches in the     string. For each match, the iterator returns a match object.     Empty matches are included in the result."""     return _compile(pattern, flags).finditer(string) finditer(pattern,string)查找模式,Return an iterator over all non-overlapping matches in the string.For each match,the iterator a match object.

代码如下:

import re   string = "dd12a32d46465fad1648fa1564fda127fd11ad30fa02sfd58afafda"   m = re.finditer("[a-z]",string)   print(m)   n = re.finditer("AB",string)   print(n)

运行结果如下:

<callable_iterator object at 0x7fa126441898> (1)   <callable_iterator object at 0x7fa124d6b710> (2)

从上面运行结果可以看出,finditer(pattern,string,flags=0)返回的是一个iterator对象。

(9)compile(pattern,flags=0)

def compile(pattern, flags=0):     "Compile a regular expression pattern, returning a pattern object."     return _compile(pattern, flags)

    (10)pruge()

def purge():     "Clear the regular expression caches"     _cache.clear()     _cache_repl.clear()

    (11)template(pattern,flags=0)

def template(pattern, flags=0):     "Compile a template pattern, returning a pattern object"     return _compile(pattern, flags|T)

    正则表达式:

语法: 

 import re   string = "dd12a32d46465fad1648fa1564fda127fd11ad30fa02sfd58afafda"   p = re.compile("[a-z]+") #先使用compile(pattern)进行编译   m = p.match(string) #然后进行匹配   print(m.group())

上面的第2 和第3行也可以合并成一行来写:

m = p.match("^[0-9]",'14534Abc')

效果是一样的,区别在于,第一种方式是提前对要匹配的格式进行了编译(对匹配公式进行解析),这样再去匹配的时候就不用在编译匹配的格式,第2种简写是每次匹配的时候都要进行一次匹配公式的编译,所以,如果你需要从一个5w行的文件中匹配出所有以数字开头的行,建议先把正则公式进行编译再匹配,这样速度会快点。

   匹配的格式:

(1)^   匹配字符串的开头

import re   string = "dd12a32d41648f27fd11a0sfdda"   #^匹配字符串的开头,现在我们使用search()来匹配以数字开始的   m = re.search("^[0-9]",string) #匹配字符串开头以数字开始 (1)   print(m)   n = re.search("^[a-z]+",string) #匹配字符串开头以字母开始,如果是从开头匹配,就与search()没有太多的区别了 (2)   print(n.group())

运行结果如下:

None
  dd

在上面(1)处我们使用^从字符串开头开始匹配,匹配开始是否是数字,由于字符串前面是字母,不是数字,所以匹配失败,返回None;(2)处我们以字母开始匹配,由于开头是字母,匹配正确,返回正确的结果;这样看,其实^类似于match()从开头开始匹配。

(2)$  匹配字符串的末尾

import re   string = "15111252598"   #^匹配字符串的开头,现在我们使用search()来匹配以数字开始的   m = re.match("^[0-9]{11}$",string)   print(m.group())

运行结果如下:

15111252598

re.match("^[0-9]{11}$",string)含义是匹配以数字开头,长度为11,结尾为数字的格式;

(3)点(·)   匹配任意字符,除了换行符。当re.DoTALL标记被指定时,则可以匹配包括换行符的任意字符

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjsgxs.html