zoukankan      html  css  js  c++  java
  • Python3 From Zero——{最初的意识:002~字符串和文本}

    一、使用多个界定符分割字符串

    字符串.split(',')形式只适用于单一分割符的情况;多分割符同时应用的时候,可使用re.split()

    >>> line = 'asdf fjdk; afed, fjek,asdf, foo'
    >>> import re
    >>> re.split(r'[;,s]s*', line)
    ['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
    或
    >>> re.split(r'(?:;,s)s*', line)    #须用非捕获形式,否则各个分割符也将出现在列表中
    ['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']

    二、字符串开头或结尾匹配

    • 思路1:.startswith(str或tuple)、.endswith(str或tuple),用元组形式可匹配多项
    • 思路2:切片之后进行对比
    • 思路3:使用正则表达式,re.match(r'patterns', str)、re.search(r'patterns$', str)

    三、字符串匹配和搜索:re模块,应用正则表达式

      re核心步骤就是先使用 re.compile() 编译正则表达式字符串, 然后使用match() , findall() 或者 finditer() 等方法以提高效率;捕获分组可以使得后面的处理更加简单,因为可以分别将每个组的内容提取出来:

    >>> datepat = re.compile(r'(d+)/(d+)/(d+)')
    >>>
    >>> m = datepat.match('11/27/2012')
    >>> m
    <_sre.SRE_Match object at 0x1005d2750>
    >>> # Extract the contents of each group
    >>> m.group()或m.group(0)
    '11/27/2012'
    >>> m.group(1)
    '11'
    >>> m.group(2)
    '27'
    >>> m.group(3)
    '2012'
    >>> m.groups()    #元组形式列出各分组的值
    ('11', '27', '2012')

    findall() 方法会搜索文本并以列表形式返回所有的匹配,如果想以迭代方式返回匹配,可以使用 finditer() 方法来代替

    >>> for m in datepat.finditer(text):
    ... print(m.groups())
    ...
    ('11', '27', '2012')
    ('3', '13', '2013')
    >>>

    四、查找和替换文本

      .replace:效率高,每次只能替换一个字符串;re.sub()/re.subn(),后者返回替换后的结果及替换的次数;.strip('=')/.lstrip('*')/.rstrip(' ')可用于支除字符串两端、左端、右端的指定字符

      常用到捕获分组形式N:

    >>> re.sub(r'(d+)/(d+)/(d+)', r'3-1-2', '11/27/2016')
    '2016-11-27'
    >>> re.subn(r'(d+)/(d+)/(d+)', r'3-1-2', '11/28/2016')
    ('2016-11-28', 1)

      对于更加复杂的情况,可指定一个替换回调函数对分组数据进行处理及格式化:

    #!/usr/bin/env python3
    #-*- coding=utf-8 -*-
    import re
    from calendar import month_abbr
    yourdate = input('请输入日期dd/mm/yyyy: ')
    m = re.search(r'(d+)/(d+)/(d+)', yourdate)
    datepat = re.compile(r'(d+)/(d+)/(d+)')
    
    def mon_ch(m):
        mon_name = month_abbr[int(m.group(2))]
        return '{:=^10} {:-<5} {:*>8}'.format(m.group(3), mon_name, m.group(1))    #format可作用于任何值,不仅是str
    
    print(datepat.sub(mon_ch(m), yourdate))

    五、 不区分大小写及多行查找、替换

    • re.findall(r'', yourtext, flags=re.I|re.M)    #多个flags用|连接
    • re.M 或用 |. 替换 . 即可实现多行匹配,后者适用性更强

    六、字符串连接、合并

      优选print('', '', '', sep=':'),其次print(':'.join(str(x) for x in data)),最次使用连接符+;

    七、处理字符串中的变量(名转换为值)

      Python不支持在字符串中对变量做简单的值替换,可通过format_map()、vars()实现,vars()或locals()是一个显示本地变量与其值的映射表(dict);

    test = 'my name is {name}!'
    name = input('请输入你的姓名:')
    'Jack'
    test.format_map(vars())
    'my name is Jack!'
  • 相关阅读:
    ApacheTika解析Word文档
    Oracle中生成随机数的函数
    实现Android和PC之间的蓝牙通信(转载)
    以C#编写的Socket服务器的Android手机聊天室Demo
    初识SVM
    一些编程的小练手
    c#连接MYSQL数据库的两种方法
    Doxygen+Graphviz用来画程序结构图
    C#+MYSQL数据库操作(附源码)
    [转]Use PowerShell to Manage Lists, Views, and Items in SharePoint(使用PowerShell管理列表、视图、列表项)
  • 原文地址:https://www.cnblogs.com/hadex/p/5750910.html
Copyright © 2011-2022 走看看