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

问题

你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定的。

解法

string 对象的 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() 是非常实用的,因为它允许你为分隔符指定多个正则模式。比如,在上面的例子中,分隔符可以是逗号,分号或者是空格,并且后面紧跟着任意个的空格。只要这个模式被找到,那么匹配的分隔符两边的实体都会被当成是结果中的元素返回。返回结果为一个字段列表,这个跟 str.split() 返回值类型是一样的。

当你使用 re.split() 函数时候,需要特别注意的是正则表达式中是否包含一个括号捕获分组。如果使用了捕获分组,那么被匹配的文本也将出现在结果列表中。比如,观察一下这段代码运行后的结果:

>>> fields = re.split(r'(;j,j\s)\s*', line)
>>> fields
['asdf', ' ', 'fjdk', ';', 'afed', ',', 'fjek', ',', 'asdf', ',', 'foo']
>>>

获取分割字符在某些情况下也是有用的。比如,你可能想保留分割字符串,用来在后面重新构造一个新的输出字符串:

>>> values = fields[::2]
>>> delimiters = fields[1::2] + ['']
>>> values
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
>>> delimiters
[' ', ';', ',', ',', ',', '']
>>> # Reform the line using the same delimiters
>>> ''.join(v+d for v,d in zip(values, delimiters))
'asdf fjdk;afed,fjek,asdf,foo'
>>>

如果你不想保留分割字符串到结果列表中去,但仍然需要使用到括号来分组正则表达式的话,确保你的分组是非捕获分组,形如 (?:…) 。比如:

>>> re.split(r'(?:,j;j\s)\s*', line)
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
>>>

《Python Cookbook 3rd》笔记(2.1):使用多个界定符分割字符串相关推荐

  1. python字符串界定符有哪些_【Python 秘籍】使用多个界定符分割字符串

    问题 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定的. 解决方案 string 对象的 split() 方法只适应于非常简单的字符串分割情形, 它并不允许有多个分隔符或 ...

  2. 《Python Cookbook 3rd》笔记汇总

    文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...

  3. 《Python cookbook》笔记二

    <Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...

  4. 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素

    <Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...

  5. Python Cookbook 3rd Edition Documentation

    Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...

  6. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  7. Machine Learning with Python Cookbook 学习笔记 第9章

    Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...

  8. Machine Learning with Python Cookbook 学习笔记 第6章

    Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...

  9. Python Cookbook学习笔记ch2_01

    第二章,也可以去这里查看笔记噢虫洞在这里 2.1使用多个界定符分隔字符串 问题:将一个字符串分隔为多个字段,但是分隔符并不是固定的 方案:string对象的split() 只适用于简单的字符串分隔,他 ...

最新文章

  1. 如何卸载office201032位_微软官方安装卸载修复工具、恶意软件删除工具,了解下!...
  2. MYSQL锁表问题解决
  3. qtablewidget 数据量大效率很低_让大牛带你走进大数据分析:R基础及应用的潮流尖端,享受RHadoop...
  4. Openssl rand命令
  5. JAVA解析各种编码密钥对(DER、PEM、openssh公钥)
  6. kfold_机器学习gridsearchcv(网格搜索)和kfold validation(k折验证)
  7. 结对编程1 - 四则运算生成器的改进(201421123040,60,61)
  8. 4行代码满分:L1-052 2018我们要赢 (5分)
  9. mysql check table_修复MySQL的MyISAM表命令check table用法
  10. pytorch默认初始化_PyTorch的初始化
  11. mysql 如何对表排序_学习MySQL:对表中的数据进行排序和过滤
  12. 机器学习实战Ch02: k-近邻算法
  13. java1.7环境_java1.7环境变量设置
  14. android9系统WIFI提示已连接,无法访问互联网
  15. pymongo的简单使用
  16. ilm 和dlm差异_NetPro 耐特普羅資訊:技術應用 / 漫談ILM與DLM-3 由DLM著手落實ILM的精神...
  17. 前端——动态生成表格
  18. cf1693C. Keshi in Search of AmShZ(div1)【最短路,反向建图】
  19. 雪都阿勒泰滑雪爱好者首选地
  20. Redis之父Antirez谈副业与主业

热门文章

  1. MULTI BIN的wince 5.0,smdk2440下的实现
  2. java jni librtmp_librtmp 编译集成
  3. 教师资格证计算机考察知识点,教师资格证考试信息技术常考知识点同步练习题.docx...
  4. python beautiful soup 标签完全相同_Python爬取Python教程并制作成pdf
  5. C#多线程之旅(2)——详解线程的开始和创建
  6. .NET平台下开源框架
  7. sharepoint当流程流转到某个节点对文档进行水印操作
  8. CountDownLatch,同步辅助类
  9. PWN-PRACTICE-BUUCTF-26
  10. REVERSE-PRACTICE-JarvisOJ-2