当前位置:网站首页>《Python Cookbook 3rd》笔记(2.1):使用多个界定符分割字符串
《Python Cookbook 3rd》笔记(2.1):使用多个界定符分割字符串
2020-11-09 23:53:00 【巨輪】
使用多个界定符分割字符串
问题
你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定的。
解法
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']
>>>
版权声明
本文为[巨輪]所创,转载请带上原文链接,感谢
https://my.oschina.net/jallenkwong/blog/4710362
边栏推荐
- 算法模板整理(一)
- Exhibition cloud technology interpretation | in the face of emergencies, how does app do a good job in crash analysis and performance monitoring?
- eleven point nine
- 编码风格:Mvc模式下SSM环境,代码分层管理
- Optimization of commodity backstage system
- How SSL certificate and public IP address affect SEO
- PL/SQL Developer临时用户和新手的功能指南
- asp.net core中使用Serilog以及自定义Enricher
- C/C++编程日记:逻辑井字棋(圈叉)游戏开发
- Formal class D25
猜你喜欢

The problem of looting by leetcode

Common settings of PLSQL developer

C/C++编程笔记:C语言开发坦克大战!纪念我们逝去的小霸王游戏

接缝雕刻算法:一种看似不可能的图像大小调整方法

恒讯科技浅谈:出现服务器宕机的处理方式

函数计算进阶-IP查询工具开发

Baishan cloud technology is selected as the top 100 Internet enterprises in China in 2020

一幅图像能顶16x16字!——用于大规模图像缩放识别的变压器(对ICLR 2021年论文的简要回顾)

Function calculation advanced IP query tool development

Unity使用transform.Rotate进行三维旋转角度出现偏差
随机推荐
Centos7 operating system security hardening series (2)
z-index属性详解
Python调用飞书发送消息
November 09, 2020: talk about the similarities and differences between the bulon filter and the cuckoo filter?
Functional guide for temporary users and novices of PL / SQL developer
2020-11-09:谈谈布隆过滤器和布谷鸟过滤器的相同点和不同点?
表单验证,为避免全局污染,少定义全局变量写法
Error running app: default activity not found solution
How to greatly improve the performance of larravel framework under php7? Install stone!
C++异常实现机制
Brief analysis of LinkedList source code
The kth smallest node in the print binary search tree of offer
剑指offer之打印超过数组一半的数字
jt-京淘项目
2018中国云厂商TOP5:阿里云、腾讯云、AWS、电信、联通 ...
Nodejs: handwritten koa Middleware
价值超10亿美元的直播系统架构图是什么样子的?
一幅图像能顶16x16字!——用于大规模图像缩放识别的变压器(对ICLR 2021年论文的简要回顾)
利用尾巴作为时间序列进行处理来识别鲸鱼
利用尾巴作为时间序列进行处理来识别鲸鱼