<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont

本文涉及的产品
转发路由器TR,750小时连接 100GB跨地域
简介: re模块:核心函数和方法常见的正则表达式使用match() 方法匹配字符串 match是re模块函数和正则表达式对象方法。

re模块:核心函数和方法

  • 常见的正则表达式

  • 使用match() 方法匹配字符串

    • match是re模块函数和正则表达式对象方法。match函数试图从字符串的起始部分对模式进行匹配。如果匹配成功就返回一个匹配对象,如果匹配失败就返回None。

     
    import re
    m=re.match(‘foo’,’foo’) #模式匹配字符串
    m.group() #返回整个匹配对象
    Out[10]: ‘foo’
m=re.match(‘foo’,’bar’) #模式并不能匹配字符串 m.group() 这个就会出现报错了,跑出AttributeError异常,打印一下是None; re.match(‘foo’,’food on the table’).group() Out[13]: ‘foo’
  • 使用search()在一个字符串中查找模式(搜索与匹配的对比)

    • search函数在任意位置对给定正则表达式模式搜索第一次出现的匹配情况,如果搜索到成功的匹配,就会返回一个匹配对象,否则None.

     
    m=re.match(‘foo’,’seafood’)
    (m.groups() #匹配失败抛出异常

    re.search(‘foo’,’seafood’).group() #搜索成功返回第一次出现的相应字符串
    Out[18]: ‘foo’


  • 匹配多个字符串

    • 则一匹配 (|)符号
        bt='bat|bet|bit'     #正则表达式模式:bat、bet、bit
        m=re.match(bt,'bat') #'bat'是一个匹配
        m.group()
        Out[19]: 'bat'
        *****************************************
        bt='bat|bet|bit'     #正则表达式模式:bat、bet、bit
        m=re.match(bt,'blt') #'blt'没有匹配,抛出异常
        m.group()
        *****************************************
        bt='bat|bet|bit'     #正则表达式模式:bat、bet、bit
        m=re.match(bt,'he bit me!') #'bit'没有匹配,抛出异常
        m.group()
        *****************************************
        bt='bat|bet|bit'     #正则表达式模式:bat、bet、bit
        m=re.search(bt,'he bit me!') #'bit'被搜所到
        m.group()
        Out[22]: 'bit'
    

  • 匹配任何单个字符

    • 点号不能匹配一个换行符\n或者非字符(空字符串)。
       anyend='.end'
       re.match(anyend,'bend').group() #点好匹配'b'
       Out[24]: 'bend'
        *****************************************
        anyend='.end'
        re.match(anyend,'end').group() #不匹配任何字符,抛出异常
        *****************************************
        re.search('.end','The end.').group()
        Out[25]: ' end'
    

  • 创建字符集([])

        re.match('[cr][23][dp][o2]','c3po')  #匹配'c3po'
        Out[28]: 'c3po'
        *****************************************
       re.match('[cr][23][dp][o2]','c2do')#匹配'c2do'
        Out[29]: 'c2do'
        *****************************************
        re.match('r2d2|c3po','c2do').group()  #不匹配'c2do',抛出异常
    

  • 使用findall()和finditer()查找每一次出现的位置

    • findall()查询字符串中某个正则表达式模式全部的非重复出现情况,返回的是一个列表。
    • 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
     import  re
     re.findall('car','car')
     Out[4]: ['car']
     "*****************************************"
     re.findall('car','scary')
     Out[6]: ['car']
     "*****************************************"
     re.findall('car','carry the barcard to the car')
     Out[5]: ['car', 'car', 'car']
     "*****************************************"
    it =re.finditer(r'(th\w+) and (th\w+)',s,re.I)
    for match in it:
        print(match.groups())
    ('This', 'that')
    "*****************************************"
    match.group(1)
    Out[19]: 'This'
    "*****************************************"
    match.group(2)
    Out[20]: 'that'
    
  • 使用sub()和subn()搜索与替换

    • 两者几乎一样,都是将字符串中所有匹配正则表达式的部分进行某种形式的替换。不同的是,subn()还返回一个表是替换的总数。
    re.sub('X','Mr. Smith','attn:X\n\nDear X,\n')
    Out[33]: 'attn:Mr. Smith\n\nDear Mr. Smith,\n'
    "*****************************************"
    re.subn('X','Mr. Smith','attn:X\n\nDear X,\n')
    Out[34]: ('attn:Mr. Smith\n\nDear Mr. Smith,\n', 2)
    "*****************************************"
    print(re.sub('X','Mr. Smith','attn:X\n\nDear X,\n'))
    attn:Mr. Smith
    Dear Mr. Smith,
    "*****************************************"
    re.sub('[aa]','X','abcdef')
    Out[36]: 'Xbcdef'
    "*****************************************"
    re.subn('[aa]','X','abcdef')
    Out[37]: ('Xbcdef', 1)
    "*****************************************"
    re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})',r'\2/\1/\3','2/20/91')
    Out[30]: '20/2/91'
    "*****************************************"
    re.sub(r'(\d{1,2})/(\d{1,2})/(\d{2}|\d{4})',r'\2/\1/\3','2/20/1991')
    Out[31]: '20/2/1991'
    

  • 在限定模式上使用split()分割字符串

    • split()对于字符串的工作方式是类似的分割一个固定字符串相比,他们基于正则表达式的模式分割字符串。
    re.split(':','str1:Str2:str3')
    Out[42]: ['str1', 'Str2', 'str3']
    "*****************************************"
    DATA = ('Mountain View, CA 94040',
                'Sunnyvale, CA',
                'Los Altos, 94023',
                'Cupertino 95014',
                'Palo Alto CA', )
    for datum in DATA:
    print(re.split(', |(?= (?:\d{5}|[A-Z]{2})) ',datum))
    ['Mountain View', 'CA', '94040']
    ['Sunnyvale', 'CA']
    ['Los Altos', '94023']
    ['Cupertino', '95014']
    ['Palo Alto', 'CA']
    
目录
相关文章
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
最近在线上往hbase导数据,因为hbase写入能力比较强,没有太在意写的问题。让业务方进行历史数据的导入操作,中间发现一个问题,写入速度太快,并且业务数据集中到其中一个region,这个region无法split掉,处于不可用状态。
1338 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Every Programmer Should Know These Latency Numbers 1秒=1000毫秒(ms) 1秒=1,000,000 微秒(μs) 1秒=1,000,000,000 纳秒(ns) 1秒=1,000,000,000,000 皮秒(ps) L1 cache reference .
647 0
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
hadoop服务器更换硬盘操作步骤(datanode hadoop目录${HADOOP_HOME}/bin    日志位置:/var/log/hadoop)1.登陆服务器,切换到mapred用户,执行jps命令,查看是否有TaskTracker进程。
1010 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
从hadoop移除机器把需要移除的机器增加到exclueds文件中,强制刷新datanode列表,等待decommission 状态正常后,即可停机下架,如有必要在namenode执行balancer操作。
680 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
 Connection reset by peer的常见原因: 1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭;    如果知道实际连接服务器的并发客户数没有超过服务器的承载量,看下有没有网络流量异常。
857 0
|
Web App开发 存储 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
NoSuchObjectException(message:There is no database named cloudera_manager_metastore_canary_test_db_hive_hivemetastore_df61080e04cd7eb36c4336f71b5a8bc4) at org.
1079 0
|
Web App开发 前端开发 数据库
|
SQL Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
     如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。
777 0
|
Web App开发 前端开发 关系型数据库
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
mysql修改表、字段、库的字符集 修改数据库字符集: ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE .
708 0
|
Web App开发 前端开发 关系型数据库
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
如果mysql正在运行,/etc/init.d/mysqld stop 启动mysql(无需输入密码):bin/safe_mysqld –skip-grant-tables & 在bin目录下执行mysql,此时无需输入密...
804 0
下一篇
无影云桌面