问题

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

解决方案

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'(;|,|\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'(?:,|;|\s)\s*', line)

['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']

>>>

python字符串界定符有哪些_【Python 秘籍】使用多个界定符分割字符串相关推荐

  1. python字符串与列表与运算_[Python学习笔记1]Python语言基础 数学运算符 字符串 列表...

    这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...

  2. python中for循环的用法_@Python小白,一文让你掌握Python爬虫

    兴趣 我没事喜欢逛知乎,有一段时间看到了这个问题:利用爬虫技术能做到哪些很酷很有趣很有用的事情: http://t.cn/RptGOPx 觉得回答的一个个炒鸡酷炫 就对爬虫产生了浓厚的兴趣, 于是就开 ...

  3. python打开excel执行vba代码_“Python替代Excel Vba”系列(终):vba中调用Python

    请关注本号,后续会有更多相关教程. 系列文章 学Python还不会处理Excel数据?带你用pandas玩转各种数据处理"Python替代Excel Vba"系列(二):panda ...

  4. python中complex函数的用法_​Python中complex函数有什么用

    ​Python中complex函数有什么用 发布时间:2020-12-15 09:34:36 来源:亿速云 阅读:71 作者:小新 这篇文章给大家分享的是有关Python中complex函数有什么用的 ...

  5. python c++情侣网名含义_#python和C/C++#让python和C/C++联姻

    让python不在孤单,轻易而举的为python写C/C++第三方库. 我们都知道python很慢,特别是处理大数据的时候,简直慢到极致,如果在知道代码的瓶颈的时候,可以将需要大量计算的数据块放在C/ ...

  6. python爬虫项目实战教学视频_('[Python爬虫]---Python爬虫进阶项目实战视频',)

    爬虫]---Python 爬虫进阶项目实战 1- Python3+Pip环境配置 2- MongoDB环境配置 3- Redis环境配置 4- 4-MySQL的安装 5- 5-Python多版本共存配 ...

  7. python三维图如何标注曲面_(python)使用colormap作为第4维,x,y,z函数绘制3d曲面 - python...

    我正在尝试绘制3d曲面,其中三个维度中的每个维度都在单独的值数组中,并且每个坐标处的曲面着色是x,y,z的函数.一种numpy.pcolormesh,但是是4D而不是3D的. 3D图由下式给出: fr ...

  8. python系统提供构造函数传入参数_[ Python入门教程 ] Python函数定义和使用

    函数是一段可以重复多次调用的代码,通过输入的参数值,返回需要的结果.通过使用函数,可以提高代码的重复利用率.本文主要介绍Python函数的定义.调用和函数参数设置方法. 函数的定义 Python函数定 ...

  9. python画完图 程序暂停运行_[Python实战]你也能写的计时器程序

    文章地址:[Python实战]你也能写的计时器程序 上次,公众号介绍了如何使用 Pyqt5 制作猜数游戏界面,并介绍了如何在 Pycharm 中使用 Qt Designer 生成 UI 文件.这次,我 ...

  10. python判断是否为变位词_[python]变位词的判别与分类

    最近老师留了个作业,是对近12万的单词进行变位词的判断与分类,最开始博主按着非常普通的想法,先写了个函数来判断两个单词是不是变位词,然后再对所有单词遍历判别.因为单词数量实在是多,所以运行时间很长.所 ...

最新文章

  1. 【Project Euler】530 GCD of Divisors 莫比乌斯反演
  2. 这个最新无人车模拟环境,让仿真路测效率提升数千倍!华人团队提出,登上Nature子刊...
  3. java注解简单实例
  4. 微信小程序开发的快速步骤方法和最大的坑
  5. 一篇带你搞透回溯算法
  6. 清华大学计算机专业学生埃朗读村,《朗读者~矣晓沅(清华大学计算机研究生  彝族)》...
  7. 推荐前端性能优化辅助工具Google LightHouse (灯塔)
  8. How to Use Command to Execute Git Push with Review from Sean
  9. RC电路输出波形的时域与频域分析
  10. 关于 Service 设计初步(MSDN节选翻译)
  11. rsync 自动创建目录的坑点
  12. (62)FPGA一维数组(reg)
  13. linux lvm 删除pv磁盘,如何安全的删除Linux LVM中的PV物理卷(硬盘或分区)
  14. NFS服务启动:rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
  15. Android进阶笔记18:Android 获取Button的高度、宽度、坐标值
  16. Elasticsearch 单模式下API的增删改查操作
  17. Graphics进行局部旋转的办法
  18. 等价类划分法测试用例设计举例
  19. 单片机发射红外c语言程序,基于单片机的红外发射C语言程序
  20. 巴比特 | 元宇宙每日必读:“由虚向实”的工业元宇宙落地情况如何?未来又将走向何方?...

热门文章

  1. “用户、组或角色'XXX'在当前数据库中已存在”问题
  2. 车载导航系统中常用物理量和单位
  3. 转:Cocoa Runtime系统知识整理
  4. 【转】职业生涯30年的规划(经典)
  5. Captaris Workflow开发系列课程介绍。
  6. 通过FTP备份IOS
  7. 信息学奥赛一本通(1123:图像相似度)
  8. 动态规划 —— 概率 DP 与期望 DP
  9. 程序自动分析(洛谷-P1955)
  10. Almost Arithmetic Progression(CF-978D)