- 帖子
- 8
- 精华
- 0
- 积分
- 45
- 阅读权限
- 10
- 注册时间
- 2017-8-5
- 最后登录
- 2017-9-11
|
crossin先生 发表于 2017-8-15 22:18
没基础能拼成这样,我也是蛮佩服的
课程里有正则相关的课程,你翻一下。
建议把基础课程看下,花不了多少时 ...
其实是快速扫过你的教程一轮再去找爬虫的,不过没耐下心来打基础。我试试。
这会儿仔细把你教程里的5篇re内容过了一下,干脆在这个帖子下面记录一下进展吧。看看过会儿能不能把我要的两种正则贴出来。
先是学习记录- # -*- coding: utf-8 -*-
- '''
- Created on Tue Aug 15 23:00:39 2017
- @author: vocaliu
- @version: Anaconda python3.6
- 学习crossincode的re部分:
- 1, re.findall(pattern,text)输出符合的结果组成list []
- 2,\b转义符的使用,代表单词两端
- 3,[]代表其中任意匹配均可
- 4,str前的r用于消除转义符
- 5,
- “.” 换行之外的任意字符(0-1个)
- “*” 代表前面字符的任意数量重复
- “\S” 空白之外的任意字符(0-1个)
- “?” .* 和 .*? 的区别,一长一短
- 6,.*? 和 \S*
- 7,
- \d = [0123456789]= =[0-9] -> [a-zA-Z] : 任意长度数字\d* or [0-9]*
- *号任意数量可以取到0,+号从1开始: 非0的任意长度数字\d+ or [0-9]+
- 使用{n}从任意数量变为固定数量n: \d{11} or [0-9]{11} 代表11位数字
- 电话号码的匹配: 1\d{10} or 1[0-9]{10}
- {n} {n,} {n,m} 的区别。 其中 ?={0,1}
- 8,
- \w - 匹配字母或数字或下划线或汉字(3.x版本可以匹配汉字,但2.x版本不可以)
- \s - 匹配任意的空白符
- ^ - 匹配字符串的开始
- $ - 匹配字符串的结束 注意与\b的异同
- \W - 匹配任意不是字母,数字,下划线,汉字的字符
- \D - 匹配任意非数字的字符
- \B - 匹配不是单词开头或结束的位置
- [^abcd] 除abcd以外的任意字符
- '''
- '''
- 例题1
- import re
- text = "Hi, I am Shirley Hilton. I am his wife."
- text2 = "site sea sue sweet see case sse ssee loses"
- pattern1 = r"\bs.*?e\b"
- pattern2 = r"\bs\S*e\b" #.*? 和 \S*的区别
- m = re.findall(pattern2, text2)
- if m:
- print (m)
- else:
- print ('not match')
- '''
- '''
- 例题2
- '''
- import re
- text = ['(021)88776543','010-55667890','02584453362','0571 66345673']
- pattern = r"\(?[0-9]+[\)\-\s]?[0-9]+" # ()-等字符都需要转义
- pattern2 = r"\(?0\d{2,3}[) -]?\d{7,8}" # 更准确的匹配:首位0,考虑数字的数量。注意数字的两种写法以及空格的匹配区别
- pattern3 = r"\(0\d{2,3}\)\d{7,8}|0\d{2,3}[ -]?\d{7,8}" #使用|匹配有或者没有()的两种情况
- m = []
- for i in range(0,4):
- m.append(re.findall(pattern, text[i]))
- if m[i]:
- print (m[i])
- else:
- print ('not match')
- print(m)
复制代码 |
|