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

字符串.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)
''
>>> m.group(2)
''
>>> m.group(3)
''
>>> m.groups() #元组形式列出各分组的值
('', '', '')

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

>>> for m in datepat.finditer(text):
... print(m.groups())
...
('', '', '')
('', '', '')
>>>

四、查找和替换文本

  .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 或用 \n|. 替换 . 即可实现多行匹配,后者适用性更强

六、字符串连接、合并

  优选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!'

Python3 From Zero——{最初的意识:002~字符串和文本}的更多相关文章

  1. Python3 From Zero——{最初的意识:000~Initial consciousness}

    http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 a.编码 默认情况下,Python ...

  2. Python3 From Zero——{最初的意识:008~初级实例演练}

    一.构显国际橡棋8x8棋盘 #!/usr/bin/env python3 #-*- coding:utf-8 -*- color_0="\033[41m \033[00m" col ...

  3. Python3 From Zero——{最初的意识:006~数据编码与处理}

    一.读写CSV数据: #!/usr/bin/env python3 #-*- coding=utf8 -*- import csv with open('kxtx.csv', 'rt') as f: ...

  4. Python3 From Zero——{最初的意识:001~数据结构和算法}

    一.从队列两端高效插入.删除元素,及保留固定数量的数据条目: collections.deque([iterable[,maxlen=N]]) a = collections.deque([1, 2] ...

  5. Python3 From Zero——{最初的意识:007~函数}

    一.编写可接受任意数量参数的函数:*.** >>> def test(x, *args, y, **kwargs): ... pass ... >>> test(1 ...

  6. Python3 From Zero——{最初的意识:005~文件和I/O}

    一.输出重定向到文件 >>> with open('/home/f/py_script/passwd', 'rt+') as f1: ... print('Hello Dog!', ...

  7. Python3 From Zero——{最初的意识:004~迭代器和生成器}

    一.反向迭代:reversed() >>> a [1, 2, 3, 4] >>> for x in reversed(a): ... print(x, end=' ...

  8. Python3 From Zero——{最初的意识:003~数字、日期、时间}

    一.对数值进行取整:round(value,ndigits) >>> round(15.5,-1) #可以取负数 20.0 >>> round(15.5,0) #当 ...

  9. [转]python3字符串与文本处理

    转自:python3字符串与文本处理 阅读目录 1.针对任意多的分隔符拆分字符串 2.在字符串的开头或结尾处做文本匹配 3.利用shell通配符做字符串匹配 4.文本模式的匹配和查找 5.查找和替换文 ...

随机推荐

  1. 芜湖市2018市队选拔Day2T1

    好激动啊,Day2竟然AK了! Day2T1养宠物 Descriptionbadgers是可爱的动物,Smart想拥有一些.宠物店提供N个badgers,编号为1..N,Smart都很喜欢,所以他想拥 ...

  2. git stash 保存和恢复进度

    1. stash当前修改 git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录. 比如下面的中间状态,通过git stash命令推送一个新的储藏,当前的工 ...

  3. [CQOI2014]数三角形 题解(找规律乱搞)

    题面 其实这道题不用组合数!不用容斥! 只需要一个gcd和无脑找规律(滑稽 乍一看题目,如果单纯求合法三角形的话情况太多太复杂,我们可以从局部入手,最终扩展到整体. 首先考虑这样的情况: 类似地,我们 ...

  4. JS闭包的详解

    目录 一.什么是闭包? 二.闭包有什么好处?应用在哪? 2.1 好处: 2.2 用法: 三.闭包需要注意的地方? 3.1 IE下会引发内存泄露 一.什么是闭包? 特点: 1 函数嵌套函数 2 内部函数 ...

  5. 如何禁止C++默认成员函数

    如何禁止C++默认成员函数 发表于 2016-03-02   |   分类于 C++  |   阅读次数 17 前言 前几天在一次笔试过程中被问到C++如何设计禁止调用默认构造函数,当时简单的想法是直 ...

  6. HDU 5119 Happy Matt Friends (背包DP + 滚动数组)

    题目链接:HDU 5119 Problem Description Matt has N friends. They are playing a game together. Each of Matt ...

  7. linux网卡驱动更新方法

    kernel: eth0: igb_reset_task: Reset adapter解决方法 1. LVS集群web项目,运行大概一个月左右出现访问慢的情况,查询mysql服务器时/var/log/ ...

  8. 集合 HashMap 的原理,与 Hashtable、ConcurrentHashMap 的区别

    一.HashMap 的原理 1.HashMap简介 简单来讲,HashMap底层是由数组+链表的形式实现,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表 ...

  9. XX Russia Team Open, High School Programming Contest St Petersburg, Barnaul, Tbilisi, Almaty, Kremenchug, November 30, 2019

    ContestLink easy: AFI medium-easy: BDH medium: CGKL ???: EJ A. Attractive Flowers 签到. B. Blocking th ...

  10. nuxt 利用lru-cache 做服务器数据请求缓存

    // 运行与服务端的js // node.js lru-cache import LRU from 'lru-cache' const lruCache = LRU({ // 缓存队列长度 max: ...