Python之学习笔记(正则表达式)

来源:互联网 发布:电脑滚动字幕软件 编辑:程序博客网 时间:2024/05/17 09:06

  • 代码

代码

# -*- coding: utf-8 -*-'正则表达式的使用简介'import re  # 正则表达式'''正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。举例子:我们判断一个字符串是否是合法的Email的方法是:    创建一个匹配Email的正则表达式;    用该正则表达式去匹配用户的输入来判断是否合法。''''''字符串表示:1、在正则表达式中,如果直接给出字符,就是精确匹配。用\d可以匹配一个数字,\w可以匹配一个字母或数字。2、可以匹配任意字符,所以:'py.'可以匹配'pyc'、'pyo'、'py!'等等。3、匹配变长的字符:要匹配变长的字符,在正则表达式中,用*表示任意个字符(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示n-m个字符:举例子:来看一个复杂的例子:\d{3}\s+\d{3,8}。我们来从左到右解读一下:    \d{3}表示匹配3个数字,例如'010';    \s可以匹配一个空格(也包括Tab等空白符),所以\s+表示至少有一个空格,例如匹配' ',' '等;    \d{3,8}表示3-8个数字,例如'1234567'。综合起来,上面的正则表达式可以匹配以任意个空格隔开的带区号的电话号码。如果要匹配'010-12345'这样的号码呢?由于'-'是特殊字符,在正则表达式中,要用'\'转义,所以,上面的正则是\d{3}\-\d{3,8}。''''''精确匹配:[0-9a-zA-Z\_]可以匹配一个数字、字母或者下划线;[0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','Py3000'等等;[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串,也就是Python合法的变量;[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。A|B可以匹配A或B,所以[P|p]ython可以匹配'Python'或者'python'。^表示行的开头,^\d表示必须以数字开头。$表示行的结束,\d$表示必须以数字结束。你可能注意到了,py也可以匹配'python',但是加上^py$就变成了整行匹配,就只能匹配'py'了。'''# 考虑转义的问题,使用# s = r'ABC\-001' # Python的字符串# 对应的正则表达式字符串不变:# 'ABC\-001'print re.match(r'^\d{3}\-\d{3,8}$', '010-12345')print r'^\d{3}\-\d{3,8}$'test = '  ' if re.match(r'^\d{3}\-\d{3,8}$', test):    print 'ok'else:    print 'failed'# 进行字符串切割re.split(r'\s+','a  b     c     d')# >>> re.split(r'[\s\,\;]+', 'a,b;; c  d')# ['a', 'b', 'c', 'd']# 分组m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')print m.group(0)print m.group(1)print m.group(2)# 时间匹配t = '19:05:30'm = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$', t)print m.groups()# 贪婪匹配print re.match(r'^(\d+)(0*)$', '102300').groups()# 非贪婪匹配print re.match(r'^(\d+?)(0*)$', '102300').groups()# 对于常见的正则表达式进行预编译可以提高速率re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')print re_telephone.match('010-12345').groups()print re_telephone.match('010-8086').groups()# 邮箱的正则表达式in_test = '123'         #raw_input()if re.match(r'^[0-9a-zA-Z\_]+\@[a-z]+\.com$', in_test):    print 'ok'else:    print 'failed''''eadd = raw_input('Please enter your email address: ') if re.match(r'(\w+|(\w+.\w+?))\@(\w+?).(com|net|org|gov|cn)$', eadd):     print 'It\'s a good email address.' else: print 'It\'s not a good email address.''''# 在中文时用searchin_test = raw_input()m = re.match(r'^\<([a-zA-Z\s]+)\>([0-9a-zA-Z\_]+)\@([a-z]+)\.com$', in_test)if m:    print m.group(0)    print m.group(1)else:    print 'failed'
0 0