文章目录

  • 1 问题
  • 2. 解决方案
  • 3. 讨论

1 问题

你需要分割一个字符串,但是字符串内的分隔符并不是同一个。

2. 解决方案

实际上,虽然字符串对象有一个 split() 方法,但是该方法一般只用于很简单的场景,对于字符串中有多种分隔符,或者分隔符周围有空格等情况就无能为力了。在这种情况,你可以使用 re 模块的 split() 方法。例如:

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

3. 讨论

re.split() 方法的优势在于,该方法可以指定多个字符串分隔符。例如:在上面的例子中,分隔符可能是逗号 , ,分号 ; 或者任意数量的空格,据此将字符串分割成元素为子串的列表。

在使用 re.split() 时,你需要特别注意一点,也就是如果正则表达式中包含由圆括号 () 确定的捕捉分组时,那么此时匹配出的分隔符也会被包含在结果中。例如:

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

在有些情况下,获取分隔符字符是有其使用场景的。比如,你希望重新输出原字符串,但是希望当分隔符中包括非空格字符(如: ,;)时,仅保留非空格字符作为分隔符,如果分隔符为多个空格,则仅保留一个。

>>> fields = re.split(r'(;|,|\s)\s*', line)
>>> fields
['asdf', ' ', 'fjdk', ';', 'afed', ',', 'fjek', ',', 'asdf', ',', 'foo']
>>> values = fields[::2]
>>> values
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
>>> delimiters = fields[1::2] + ['']
>>> delimiters
[' ', ';', ',', ',', ',', '']
>>> ''.join(v + d for v, d in zip(values, delimiters))
'asdf fjdk;afed,fjek,asdf,foo'

如果你不希望在结果中包含分隔符,同时又希望在正则表达式中使用分组,那么你可以使用非捕捉式的分组,具体格式是 (?:...) 。例如:

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

【Python 每日一技】根据任意分隔符分割字符串相关推荐

  1. 【Python 每日一技】根据序列中每个元素共同的数据域进行分组迭代

    文章目录 1 问题 2. 解决方案 3. 讨论 1 问题 你有一个元素均为字典或其他类型的序列,你希望根据每个元素中的同一个字段(例如:日期)对序列中的所有元素进行分组迭代. 2. 解决方案 iter ...

  2. 站长在线Python精讲:在Python中使用正则表达式的split()方法分割字符串详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用正则表达式的split()方法分割字符串详解>. 使用正则表达式分割字符串 在Python中使用正则表达 ...

  3. Python 按行读取文件内按分隔符分割字符串(去除空格和换行、字符串分割)

    a = "dba abc\n"print (a.strip()) print (a.split(" ")) print (a.split(" &quo ...

  4. python长度分割文本_python 按照固定长度分割字符串的方法小结

    有如下的一堆mac地址,需要更改成一定格式,如mac='902B345FB021'改为mac='90-2B-34-5F-B0-21'. 借助python脚本,可以轻松实现,原理就是:字符串的按照固定长 ...

  5. 如何在javascript中使用多个分隔符分割字符串?

    如何在JavaScript中使用多个分隔符拆分字符串? 我正在尝试在逗号和空格上进行拆分,但是AFAIK,JS的拆分功能仅支持一个分隔符. #1楼 对于那些想要在拆分功能中进行更多自定义的人,我编写了 ...

  6. Python使用多个分隔符分割字符串

    本文收录于<Python开发>专栏,此专栏聚焦于Python开发中的编程技巧和总结,将持续更新,欢迎大家订阅! 个人主页:有梦想的程序星空 个人介绍:小编是人工智能领域硕士,全栈工程师,深 ...

  7. python多个分隔符分割字符串_Python之使用多个分割符分割字符

    在使用 Python 处理字符串的时候,有时候会需要分割字符. 分隔符比如下划线 "_",比如 "."之类的. 一个分隔符 比如对于文件名 20191022_l ...

  8. python多个分隔符分割字符串_Python中带有多个分隔符的拆分字符串

    智慧大石 对于任何可迭代的分隔符,以下是使用正则表达式的安全方法:>>> import re>>> delimiters = "a", &quo ...

  9. 【Python 每日一技】建立多个值和单个键的映射

    1 问题 你希望创建一个字典,该字典可以建立多个值和单个键之间的映射(即所谓的多值字典). 2. 解决方案 在 Python 中,基于普通的字典类 dict 创建的对象一般只可以存储一个键和一个值的映 ...

最新文章

  1. 东南大学 | 12年,热爱始终如一
  2. python画直方图成绩分析-Python数据分析:直方图及子图的绘制
  3. c语言 字符串数组末尾,C语言中,利用宏定义一个字符串和字符数组定义的字符串其末尾都会自动添加\0字符...
  4. 洛谷 P1410 子序列(DP)
  5. 计算机基础知识赏花主观题,计算机研究生考什么?你知道吗?
  6. 他读博期间连发3篇Science,28岁任武大教授后再发Nature!
  7. Java编程技巧之样板代码
  8. 亚信安全首推MSP创新型合作伙伴业务模式 助力企业畅享云端快捷服务
  9. JQuery:常用方法一览
  10. linux异步io缺陷,具有libaio性能问题的Linux异步IO
  11. 全国省市区mysql数据
  12. 2021小结暨2022打脸计划
  13. 【超级简单但超级有用】让PDF书籍变身为可搜索文件
  14. TypeScript实现小游戏---贪吃蛇(超详细)
  15. c++实现经典游戏贪吃蛇(超详解)
  16. 2021中国人寿广发银行科技岗实习
  17. 睡眠手册-《斯坦福高效睡眠法》笔记
  18. 在Windows server 2008 R2上创建AD域控制器
  19. 计算机中的服务是什么,电脑中的Local Service是什么意思?
  20. 又一次质的飞跃——致2015年终总结

热门文章

  1. 人脸识别(识别程序)
  2. 机器学习回归预测_通过机器学习回归预测高中生成绩
  3. ant安装和ant的环境配置
  4. 【bzoj 1812】[Ioi2005]riv(树形dp)
  5. 计算机十进制转为八位二进制,Java将十进制转换为8位二进制(Java convert from decimal to 8-bit binary)...
  6. linux--- 连接数据库
  7. 视频号在微信生态里的定位如何?
  8. MIPS指令集处理器设计(支持64条汇编指令)
  9. latex表格调整行距
  10. 【开源】蓝奏云直链解析