import re模块

#! -*- coding: utf-8 -*-
# ssh project

import re

"""
re模块:
正则表达式
re.match 从头开始匹配
re.search 全局匹配。找到就返回span返回的是切片索引 + group()就得到匹配到的参数 re.search("[0]",r).group()
re.findall 把匹配到的 返回成元组输出、比如匹配到 1 3 4 ==》 [1,3,4]
re.split() re.split('\d',字符串)按数字分割就是不包括数字(默认全部分割)maxsplit=2 和count是一个意思
re.sub() re.sub('old_value','new_value',字符串|count=3的用法是等于一个数字表示从头开始匹配多少次数)
re.fullmatch re.fullmatch('ssh','ssh123') 成功返回字符串 失败返回None, re.fullmatch('\w+@\w+\.(com,cn,edu)',邮箱)小括号里面表示com,cn,edu和前面的整体进行贪婪匹配
re.compile 把pattern = re.compile(匹配条件)生成对象, 再通过pattern与string匹配==re.fullmatch(pattern,string) 节约翻译语句的过程
re.flag 1.re.I(忽略大小写)用法 re.search('s','Ssh',re.I)
2.re..search('foo.$','foo1\nfoo2\n',re.M) 转换成多行模式那么这样就匹配到foo1如果没有re.M就匹配foo2
3.re.search('.','\n'.'\t',re.S) 可以匹配到所有任意字符
4.re.search('. #test','ssh',re.X) 可以把#当做是注释

'.' 匹配除了\n之外的任意字符 匹配几个就几个点....
'^' 匹配字符的开头的需求字符 ==> re.match('^a','abc')
'$' 匹配字符的结尾 语法:re.search('b$','ab')
'*' 匹配*号前的字符0次或者多次,re.search('a*','aaaaab')
'+' 匹配前一个字符1次或者多次 re.finall("ab+","ab+cd+abb+bba") 匹配到 ab abb
'?' 匹配前一个字符1次或者0次 re.search('b?','laobi').group() 匹配到1次
'{m}'匹配前一个字符M次 re.search('b{3}',"sshsshbbbb")
'{n,m}'匹配前一个字符n到m次 re.finall("ab{1,3},"abb abc abbcbbb")
'|' 匹配|左或|右的字符(逻辑或的含义)re.search("abc|ABC","ABCabcADA").group()
'(...)'分组匹配 re.search("(abc){2}a(123|45)"),"abcasdasdba21456c").groups() ==>只与分组匹配使用,
'\A' 只匹配开头字符 ==> '^'
'\Z' 只匹配结尾字符 ==>'$'
'\d' 只匹配数字0-9
'\D' 只匹配非数字
'\w' 只匹配[A-Za-z0-9]
'\W' 只匹配非[A-Za-z0-9] ==>就是匹配特殊字符
'\s' 匹配空白字符。 \t \n \r
'(?P<province>\d{3}(?P<city>\d{3})(?P<born_year>\d{4}))'.groups()得到匹配到的身份证前10位
把分组匹配生成对象 res = 分组匹配 res.groupdict()就会得到 province : 110 city:112 born_year : 2000
"""
f = open("信息表", 'r', encoding='utf-8')

# contaces = []
#
# for line in f:
# name,region,height,weight,phone = line.split()
# if phone.isdigit():
# contaces.append(phone)
# print(contaces)

data = f.read()

print(re.findall("1[0-9]{10}", data))
posted @ 2018-08-14 13:56  苏小环  阅读(240)  评论(0)    收藏  举报