while True:
phone_num = input('please input your phone_num:')
if len(phone_num) == 11 \
and phone_num.isdigit()\
and (phone_num.startswith('') \
or phone_num.startswith('') \
or phone_num.startswith('')):
print('号码正确')
break
else:
print('号码错误') python操作正则表达式要使用re模块。re模块包含的函数:findall,search,match,sub,subn,compile,split,finditer
findall和split把匹配结果放在列表里面。search,match,finditer调用group才能取到结果。

1.findall:
import re
ret = re.findall('a','eva agon yuan') #结果['a', 'a', 'a'],将后面待匹配的字符串跟‘a’匹配,把所有满足条件的结果放在列表里面。
print(ret)
ret1 = re.findall('[a-z]+','eva agon yuan') #['eva', 'agon', 'yuan']
print(ret1)
ret2 = re.findall('[a-z]*','eva agon yuan') #['eva', '', 'agon', '', 'yuan', '']#待匹配的字符串里面的空白符跟[a-z]*匹配了0次。所以结果有空白字符串。空白符可以跟*号和?号匹配0次。
print(ret2)
import re
def idcheck(idc):
ret = re.findall('^[1-9]\d{14}(\d{2}[0-9x])?$',idc) #身份证为15位数字或18位数字或17位数字加X.
if ret:
print('匹配成功')
else:
print('匹配失败')
idcheck('111111111111111111')
2.search: 
import re 
ret = re.search('a','eva qgon yuqn') #从前往后,找到第一个就返回。
if ret: #如果找到,则返回的变量为True,调用group就可以拿到结果。如果没有找到,返回None。结果是a
print(ret.group()) #a
ret1 = re.search('a','ev1 qgon yuqn').group() #如果没有找到,并且没有使用if语句,就会报错。所以上面程序是常用格式。
print(ret1) 3.match: import re
ret = re.match('a','abc') #从第一个字符开始匹配。
if ret: print(ret.group()) #a 4.sub: import re
ret = re.sub('\d','@','4ew 5her hsdfgh5 shsr56hserh',10) #@ew @her hsdfgh@ shsr@@hserh ,数字替换成@,重复10次。如果不输入重复次数,默认匹配任意多次。
print(ret) 5.subn: import re ret = re.subn('\d','@','4ew 5her hsdfgh5 shsr56hserh') #('@ew @her hsdfgh@ shsr@@hserh', 5) ,数字替换成@,返回元组,元组第一个元素是替换的结果,第二个元素是替换的次数。
print(ret) 6.complie:把正侧编译成对象,适用于这个正侧重复使用,并且待匹配的字符串特别长的情况。
import re
obj = re.compile('\d+')
ret = obj.findall('ad54646ae4g awe646gaa4eg 6a4g') #['54646', '4', '646', '4', '6', '4']
print(ret) 7.split: 分割结果是列表。
import re
ret = re.split('[ab]','fgiaklbjklae ajbag')#['fgi', 'kl', 'jkl', 'e ', 'j', '', 'g']
print(ret)
ret1 = re.split('[ab]', 'abcd') # 先按'a'分割得到''和'bcd',再对''和'bcd'分别按'b'分割
print(ret1) # ['', '', 'cd'] 8.finditer:返回一个迭代器。节省内存。
import re
ret = re.finditer('\d+','agejlaw54564g4e')
print([i.group() for i in ret]) #['54564', '4']
9.findall的优先级:
ret8 = re.findall('www.(baidu|laonanhai).com','www.laonanhai.com') #['laonanhai']。findall优先把组里的匹配结果返回。
print(ret8)
ret8 = re.findall('www.(?:baidu|laonanhai).com','www.laonanhai.com') #['www.laonanhai.com']。(?:)取消优先级。
print(ret8) 
10.split的优先级:
ret9 = re.split('\d','jg2jsa3gj') #['jg', 'jsa', 'gj'],没有保留分割的字符。
print(ret9)
ret10 = re.split('(\d)','jg2jsa3gj') #['jg', '2', 'jsa', '3', 'gj'],加了组,保留分割的字符。对于某些需要保留分割字符的地方是很重要的。
print(ret10)

day09-正侧表达式的更多相关文章

  1. php正规则表达式的语法

    界定符的三种书写方式: regexpal工具(正规则表达调试工具): 可以实时显示效果出来. 原子: 可见原子,即uincode编码表中的某个字符 不可见原子: 为了避免编码问题导致匹配不正确,要把文 ...

  2. C# 正规则表达式

    获取括号里的内容 public string GetRegexStr(string Str, string Symbol1, string Symbol2, bool needSymbol) { ]; ...

  3. php正规则表达式学习笔记(几个常用函数的区别)

    preg_mache()函数和 preg_mache_all()函数的区别: preg_mache()只会匹配规则中的字符一次, preg_mache_all()会匹配符合条件的所有字符! 例子对比: ...

  4. python列表解析和正同表达式

    正则表达式 [i for i in ['1232','233','22'] if re.match('^233$', i)]   return  ['233']

  5. find和grep的区别

    find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配. grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正侧表达式匹配 正侧表达式是包含匹配.

  6. 意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分

    最近研发BDC 云开发部署平台的数据路由及服务管理器意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提 ...

  7. python3 爬淘女郎

    刚学到python 组合数据类型这里,机缘巧合之下得到了一个公开课的视频,也看了前辈写的,取其精华,去其糟粕的爬了一下: import urllibfrom urllib import request ...

  8. Java程序设计概述

    摘要:1996年Java第一次发布就引起了人们的广大关注.本文简要地介绍一下Java语言的发展历史. 一.Java程序设计平台 Java是一种优秀的程序设计语言.一旦一种语言应用于某个领域,与现存代码 ...

  9. JavaScript 替换所有匹配内容

    由于JavaScript 的 replace 只能替换一次,因此另外编写一个能现替换全部匹配内容方法,代码如下: /*把 content 中所有的 searchValue 替换为 replaceVal ...

随机推荐

  1. 12 react 基础 的 css 过渡动画 及 动画效果 及 使用 react-transition-group 实现动画

    一. 过渡动画 # index.js import React from 'react';import ReactDOM from 'react-dom';import App from './app ...

  2. mysql建表语句和数据类型

    1.创建表的完整语法 create table 表名( 字段名称 数据类型[(长度) 约束条件], 字段名称 数据类型[(长度) 约束条件] )   必须的:字段名 数据类型 表名 可选的:长度 约束 ...

  3. JavaScript 之 异步请求

    一. 1.异步(async) 异步,它的孪生兄弟--同步(Synchronous),"同步模式"就是上一段的模式,后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排 ...

  4. HDU - 1251 字典树模板题

    Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).  Input输入数据的第一部 ...

  5. ZJNU 2353 - UNO

    大模拟,但是题目好像有些地方表述不清 根据UNO在初中曾被别人虐了很久很久的经历 猜测出了原本的题意 本题中的+2虽然有颜色,但是也可以当作原UNO游戏中的+4黑牌 即在某人出了+2后,可以出不同颜色 ...

  6. @ConfigurationProperties的几个使用细节

    1.只有当前组件是容器中的组件,才能使用容器提供的@ConfigurationPropeities功能 2.使用@ConfigurationProperties,被注入字段必须要有set .get 方 ...

  7. 图论中最优树问题的LINGO求解

    树:连通且不含圈的无向图称为树.常用T表示.树中的边称为树枝,树中度为1的顶点称为树叶. 生成树:若T是包含图G的全部顶点的子图,它又是树,则称T是G的生成树. 最小生成树:设T=(V,E1)是赋权图 ...

  8. JAVA初学者——算数运算符

    Hello!大家好,我是浩宇大熊猫,又是学习java的一天,开开森森~ 运算符:也就是对常量或者变量进行操作的符号 表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式,不同的 ...

  9. 为什么在SSM中的dao层不用写@Repository注解

    1.  Mybatis 接口编程中dao 层接口没有注解和 为什么能被实例化为bean? 在Spring配置Mybatis的文件中我们可以看到如下代码: <bean class="or ...

  10. art-template常用总结

    高性能JavaScript模板引擎原理解析:http://cdc.tencent.com/2012/06/15/%E9%AB%98%E6%80%A7%E8%83%BDjavascript%E6%A8% ...