python3-模块学习-2-re

之前学习了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位数字
电话号码的匹配: 1d{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以外的任意字符


'''
Created on Tue Aug 15 23:00:39 2017
@author: vocaliu
@version: Anaconda python3.6
'''

#例题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.*?eb"
pattern2 = r"bsS*eb"  #.*? 和 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"(?0d{2,3}[) -]?d{7,8}"           # 更准确的匹配:首位0,考虑数字的数量
pattern3 = r"(0d{2,3})d{7,8}|0d{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)