注意Python的字符串本身也用'\'转义,所以要特别注意,一般我们都建议使用Python的r前缀,就不用考虑转义的问题了

 1,行的起始

例子:匹配‘cat’ 开头

patt=re.compile(r'^cat') # re.compile 返回一个正则表达式对象

表示匹配以c作为一行的第一个字符,后面跟着a,后面跟着t

所以'vocative'就不会被匹配到,原因是因为cat在字符的里面

 2,行的结尾

import re
sentence='''Hi Jack:\n
Python is a beautiful language\n
BR'''
patt=re.compile(r'(BR|Bestregards)$')
m=re.search(patt,sentence)
if m :
print 'match'
else:
print 'not match'
>>
match

要查找sentence中是否以“BR或Bestregards” 结尾   

  3 ,单词的边界

正则里面有2个特殊字符\b and \B来匹配单词的边界 :

  • \b 匹配的模式是一个单词的边界(不论这个单词的前面是有字符还是没有字符)

  • \B 匹配出现在一个单词中间的模式

  • 例如:

the            #匹配包含有'the'的字符串

\bthe         #匹配任何以'the'开始的字符串

\bthe\b      #仅仅匹配单词'the'

\Bthe         #匹配任意包含'the'但不以'the'开头的单词

   4,字符组

   比如我们需要匹配'grey'或者'gray'的时候,怎么办,可以用正则的[]来表示,gr[ea]y,表示先找到g,然后找到r,然后找到e或者a,最后是一个y

patt=re.compile(r'gr[ea]y')#意思就是grey 或者gray都是可以匹配上的

   5,多选结构

我们可以用'|'来匹配任意子表达式,'|'是一个非常简便的元字符,它的意思是"或",通过它我们能把不同的子表达式组合成一个总的表达式,比如'am'|'pm'就是能够同时匹配其中任意一个的正则表达式,回头再看上面的例子'gr[ea]y',其实能写成'grey|gray',或者'gr(e|a)y'

6、可选项元素
'?' 表示可选项,问号跟在什么后面就表示什么是可选的
例如:6月4日,可能写成'June'也可以写成'Jun',而且日期也有可能写作'fourth'或者'4th'或者4,这个时候就可以写成June?(fourth|4(th)?),代表了e是可选的,th是可选的,可有可无都表示4号

7,重复出现
+,表示紧邻元素重复出现一次或者多次,至少出现一次,否则返回失败;
*,表示紧邻元素重复出现0次或者多次,允许出现0次;
例如:
  • a*表示0个或者多个a,所以为0的时候,就是空字符
  • a+表示1个或者多个a,所以a至少要有1次
8,匹配重复的次数
次数用{}里面的数字来表示
例如:patt=re.compile(r'([1-9]{3})') 就表示匹配1-9之间的数字,且这个数字只能出现3次,str='123str' ,就可以匹配上,而str1='2str1'就不能匹配,如果想匹配上要这么写patt1=re.compile(r'([1-9]{1-3})'),1-9数字出现1次或2次或3次 9、排除型字符组
  • 当^在字符组的外面的时候"表示一个行的开头"

  • 当^在字符组的内部(而且是必须紧接着字符组的第一个方括号之后),它就是一个元字符,表示排除型

  • 例如:找出字母g后面的字母不是u
  • import re
    words=['gold','Google','Sogu','Guess']
    patt=re.compile(r'.*g[^u]') #‘.’匹配任意一个字符,'*'匹配0个或多个字符,g后面不是u for w in words:
    m=re.match(patt,w)
    if m:
    print w
    >>
    gold
    Google
实战小例子
1,设计一个正则来过滤一个字符串序列中的10到59
import re

patt=r'[1-5][0-9]'

lis=[10,20,30,40,2,3,59,60,'aa','3aaa']

match=re.findall(patt,str(lis))

if match:
print(match) 结果:
['10', '20', '30', '40', '59']

2,过滤字符串中的只含2个字符的字母,并且第一个字母是大写A或B或C

patt=r'[A-C][A-Z a-z]'

3,过滤一个字符串中的含3个字母的独立字符

例如:比如这样的一个字符串'xy,1,2,?,123@sohu,Ab,w1,Cz,xyh,abc',只想过滤出来xyh,abc 这样的

patt=r'/b[a-z A-Z]{3}/b' #/b 单词的边界

4、过滤一个字符串中的含3个字母的字符,并且最后一个字母是z

patt=r'/b[a-z A-Z][a-z A-Z][Z]/b'

5,过滤正确的24小时时间制

import re
time='10:00,99:90,8:00,19:19:14:00pm,5:xm,6,00,8:0923:23pm,29:19pm,23:59'
patt = r'\b([01]?[0-9]|2[0-4])(:)([0-5][0-9])'
match = re.findall(patt,time)
if match:
print([''.join(x)for x in match]) 执行结果:
['10:00', '8:00', '19:19', '14:00', '8:09', '23:59']

Python-正则表达式及实战小例子的更多相关文章

  1. node实战小例子

    第一章 2020-2-6 留言小本子 思路(由于本章没有数据库,客户提交的数据放在全局变量,接收请求用的是bodyParser, padyParser使用方法 app.use(bodyParser.u ...

  2. iOS开发——UI进阶篇(十六)Quartz2D实战小例子

    一.画线 只有在drawRect中才能获取到跟view相关联的上下文 - (void)drawRect:(CGRect)rect {} 一条线 // 1.获取跟当前View相关联的layer上下文(画 ...

  3. python之阶乘的小例子

    现在自己写阶乘是这个样子的 def f(x): return x * f(x-1) if x >1 else 1 后来无意中看到耗子的一篇<Python程序员的进化>的文章, 感脚这 ...

  4. 爱上python(几个小例子)

    1.任务:简单测试局域网中的网络是否连接,ip范围:192.168.2.101到192.168.2.200. python 实现代码: import subprocess cmd="cmd. ...

  5. 【python】由一个小例子看出python的灵活性,IF ELSE一例

    temp = input("请输入1到100之间的数字:") num = int(temp) if 1 <= num <= 100:                   ...

  6. python 的zip 函数小例子

    In [57]: name = ('Tome','Rick','Stephon') In [58]: age = (45,23,55) In [59]: for a,n in zip (name,ag ...

  7. Java正则表达式防注入小例子

    /** * 第一行匹配特殊字符: * 第二行匹配开头和结尾都有空格的: * 第三行匹配结尾有空格的 * */ private Boolean DetermineChar(String reqData, ...

  8. Python 中class的小例子

    class Song(): def __init__(self,lyrics): self.lyrics=lyrics def sing_a_song(self): for line in self. ...

  9. 这42个Python小例子,太走心

    告别枯燥,60秒学会一个Python小例子.奔着此出发点,我在过去1个月,将平时经常使用的代码段换为小例子,分享出来后受到大家的喜欢. 一.基本操作 1 链式比较 i = 3print(1 <  ...

随机推荐

  1. linux虚拟机能ping通windows主机,windows主机ping不通linux虚拟机的解决办法

    分三步: 1.虚拟机网络连接方式选择Nat

  2. window + document + height

    jQuery(window).height()代表了当前可见区域的大小,而jQuery(document).height()则代表了整个文档的高度,可视具体情况使用.     注意当浏览器窗口大小改变 ...

  3. json教程系列(4)-optXXX方法的使用

    在JSONObject获取value有多种方法,如果key不存在的话,这些方法无一例外的都会抛出异常.如果在线环境抛出异常,就会使出现error页面,影响用户体验,针对这种情况最好是使用optXXX方 ...

  4. ggplot2学习总结

  5. BEM(一种 CSS 命名规则)

    一. 什么是 BEM BEM的意思就是块(block).元素(element).修饰符(modifier),是由 Yandex 团队提出的一种前端命名方法论. 这种巧妙的命名方法让你的 CSS 类对其 ...

  6. 20165101刘天野 2017-2018-2 《Java程序设计》第8周学习总结

    #20165101刘天野 2017-2018-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十二章Java多线程机制 一.进程与线程 1.1.任务调动 大部分操作系统(如Wi ...

  7. cocos2dx打飞机项目笔记六:GameScene类和碰撞检测 boundingbox

    GameScene类虽然是占用游戏最多时间的类,但是里面的东西不是很多,最重要的就是碰撞检测了,碰撞检测代码如下: void GameScene::detectionCrash() { CCArray ...

  8. IDEA使用前的各种基本设置(转)

    先搞个链接,以后自己慢慢总结:传送门

  9. Go Interface概念

    简单地说 Interface是一组Method的组合,可以通过Interface来定义对象的一组行为.如果某个对象实现了某个接口的所有方法,就表示它实现了该借口,无需显式地在该类型上添加接口说明.In ...

  10. Docker 搭建一个Docker应用栈

    Docker应用栈结构图 Build Django容器 编写docker-file FROM django RUN pip install redis build django-with-redis ...