码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式

时间:2019-11-12 00:36:07      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:led   表达   数字   验证   mpi   doctest   lse   pre   amp   

参考:正则表达式
# 正则表达式
import  re
# 用\d可以匹配一个数字,\w可以匹配一个字母或数字,.可以匹配任意字符,\s可以匹配一个空格(也包括Tab等空白符)

# 用*表示任意个(包括0个),用+表示至少一个字符,用?表示0个或1个字符,用{n}表示n个字符,用{n,m}表示[n~m]个字符
limit=r'\d{3}\s+\d{3,8}'
result=re.match(limit,'123  74575545')
if result:
    print('matched')

# - , ; _ : 是特殊字符,在正则表达式中,要用'\'转义:\- \, \; \_ \:

# 要做更精确地匹配,可以用[]表示范围:[ABC]===>A or B or C
# [ABC]:表示满足表示至少满足三个条件中的一个的单个字符。
# [ABC]+ :表示由至少一个 满足A/B/C条件的单个字符 构成。
# [ABC]* 表示任意个 满足A/B/C条件的单个字符 构成。
# [ABC]{0,5}: 表示由0~5个 满足A/B/C条件的单个字符 构成
print('---------------------------------------------')
limit=r'[a-zA-Z\_][0-9a-zA-Z\_]*'
if re.match(limit,'result_1_A'):
    print('match')
if re.match(limit,'9_result_1_A'):
    print('match')
# A|B可以匹配A或B,|运算符优先级很低,AB|CD :满足条件AB 获得CD
print('---------------------------')
result=re.match(r'\d\_|[a-z]+','4_')
print(result)

result=re.match(r'\d\_|[a-z]+','erererer')
print(result)
# ^表示行的开头,^\d表示必须以数字开头。
# $表示行的结束,\d$表示必须以数字结束。
print(re.match(r'^\d+[a-z]','111a1a'))

# 由于Python的字符串本身也用\转义,'ABC\\-001'==>ABC_001
# 建议使用Python的r前缀,就不用考虑转义的问题:r'ABC\-001'==>ABC_001

# re.match(limit,str)方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None。
# re.split(limit,str)返回切割后的str数组

print(re.split(r'[\,\;\s]+','1,2,;3 ,4; 5'))
# 提取满足条件的子串的强大功能
# m=re.match(^(limit_0)limit_1(limit_2)$,str):把满足条件0,2的字串提取出来
# m.group(0):str本身,group(1)开始才为目标字符串,groups():返回目标子串的元组。

m=re.match(r'(^\d{3})[\s-]+(\d+)$','123 - 74575120')
print(m.groups())

# 贪婪匹配
# 正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。
# r'^(\d+)(0*)$' :数字0会被划入第一个条件。
# 加个?就可以采用非贪婪匹配:r'^(\d+?)(0*)$'
# '.*?'表示最短匹配任意长度字符串,长度可以为零
m=re.match(r'(\d+)(0*)','123700000')
print(m.groups())

m=re.match(r'^(\d+?)(0*)$','123700000')
print(m.groups())

# 编译
# 当我们在Python中使用正则表达式时,re模块内部会干两件事情:
# 编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
# 用编译后的正则表达式去匹配字符串。
# 如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配

# compiled_limit=re.compile(limit)
# complied_limit.match(str)
# complied_limit.split(str)

temp=re.compile(r'(^\d{3})[\s-]+(\d*)$')
print(temp.match('545 - 4546455').groups())

# 邮箱验证
def email_match(email):

    '''
    >>>
    >>> email_match('tom@voyager.org')
    (True, 'tom')
    >>> email_match('bill.gates@microsoft.com')
    (True, 'bill.gates')
    >>> email_match('mr-bob@example.com')
    False

    :param email:
    :return: [true,name]or false
    '''

    limit=r'^[\w][\w\.\_]+@[\w]+\.[a-z]+$'
    result=re.match(limit,email)
    if result:
        #
        limit=r'.*?([\w\.]+)'
        name=re.match(limit,email)
        return (True,name[1])
    else:
        return False


if __name__=='__main__':
    import doctest
    doctest.testmod()

正则表达式

标签:led   表达   数字   验证   mpi   doctest   lse   pre   amp   

原文地址:https://www.cnblogs.com/huangqiang97/p/11839192.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!