在练习 python正则知识点 的时候发现好多不同寻常的知识点,一开始看不懂,专研了半天摸到一点皮毛,特此记录下来。包括:零宽断言,search小发现等。

  1. 关于零宽断言推荐看下: https://blog.csdn.net/dnxbjyj/article/details/70946508
  2. 以下几种方法效果一样:
#提取字符串中的手机号码
#目标字符串为:
		重要的事情说8130123456789遍,我的手机号是13512346789这个靓号,
		不是15600998765,也是110或119,王大锤的手机号才是15600998765。
		'''#(偷懒直接引用了python-100-day中的例子)
#方法1:使用findall()
pattern = re.compile(r"(?<=\D)1[34578]\d{9}(?=\D)")
#此处使用了零宽断言,(?<=\D)1的作用为判断1前面的字符不为数字,\d{9}(?=\D)——最后一位数字后跟的字符不为数字
sentences = '''
	重要的事情说8130123456789遍,我的手机号是13512346789这个靓号,
	不是15600998765,也是110或119,王大锤的手机号才是15600998765。
print("-----使用findall------")
m = re.findall(pattern,sentences)
print("m:",m)
#这两种写法结果一致
n = pattern.findall(sentences)
print("n:",n)
方法2:使用finditer()
print("------使用finditer()--------")
for temp1 in re.finditer(pattern,sentences):
	print('temp1:',temp1.group())
for temp2 in pattern.finditer(sentences):
	print('temp2:',temp2.group())
方法3:循环使用re.search()+.end()来达到findall()的效果
print("------使用search()---------")
n = pattern.search(sentences)
while n:
	print(n.group())
	n = pattern.search(sentences,n.end()) #从第一次搜索结果的位置继续进行下一次的搜索
	#.end()返回匹配的结束位置
	#pattern.search(string,pos,endpos) string-待匹配的字符串,pos-匹配的起始位置,可选,默认为0;
	#endpos:匹配的结束位置,可选,默认为len(string)
s1 = “rdtfy13199889988guhijokd13199889988fghjgf13199881988dgh”
c = re.findall(‘13199889988’, s1)
print©
正则表达式的匹配规则
———————单字符串的匹配————————————
第一:’.'表
                                    关于find和find_all()文本的使用
爬取网页中有用的信息时,通常是对存在于网页中的文本或各种不同标签的属性值进行查找,Beautiful Soup中内置了一些查找方式,最常用的是find()和find_all()函数。
1.find()函数的用法
find(name=None, attrs={}, recursive=True, text=None, **kwargs) 函数的参数:
if __name__ == '__main__':
    html = urlopen("http://www.pythonscraping.com/pages/page3.html")
    bsObj = BeautifulSoup(html.read(), 'html.parser')
                                    re.search扫描整个字符串并返回第一个成功的匹配,若string中包含pattern子串,则返回Match对象,否则返回None,注意,如果string中存在多个pattern子串,只返回第一个。re.search()方法用来精确匹配并提取第一个符合规律的对象,而对象内容的提取则使用search方法的属性group()来实现。函数语法:re.search(pattern, string, f...
                                    使用group()方法b = 'hello good fine're.search(r'^hello\s(.*)\sfine',b).group()group() 会返回匹配此正则表达式的字符串group(1) 会返回正则表达式中第一个括号内的内容, 以此类推,group(2) 第二个括号re.search(r'^hello\s(.*)\sfine',b).group(1)* 如果需要筛选,则要在...
                                    match()和search()都是python中的正则匹配函数,那这两个函数有何区别呢?match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none例如:#! /usr/bin/env python# -*- coding=ut...