Python下字符串指定多个分隔符分割
时间:2022-07-24
本文章向大家介绍Python下字符串指定多个分隔符分割,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
之前在文章Python数据类型之字符串中介绍了split
等分割字符串的方法,但是你会发现只能指定一个分隔符,那在Python下指定多个分隔符像AWK命令那样来分割字符串应该怎么做呢?
string
对象的 split()
方法只适应于非常简单的字符串分割情形, 它并不允许有多个分隔符或者是分隔符周围不确定的空格。当你需要更加灵活的切割字符串的时候,那就需要借助re.split()
方法了。
>>> info = "My host ip address is 10.0.1.10, hwaddress is 52:54:00:B7:7A:0A"
>>> import re
>>> re.split(r'[.,:s]s*', info)
['My', 'host', 'ip', 'address', 'is', '10', '0', '1', '10', 'hwaddress', 'is', '52', '54', '00', 'B7', '7A', '0A']
>>>
>>> info = "My host ip address is 10.0.1.10, hwaddress is 52:54:00:B7:7A:0A "
>>> re.split(r'[.,:s]s*', info)
['My', 'host', 'ip', 'address', 'is', '10', '0', '1', '10', 'hwaddress', 'is', '52', '54', '00', 'B7', '7A', '0A',
'']
>>> re.split(r'[.,:s]s*', info.strip())
['My', 'host', 'ip', 'address', 'is', '10', '0', '1', '10', 'hwaddress', 'is', '52', '54', '00', 'B7', '7A', '0A']
函数re.split()
非常实用,因为它允许你为字符串指定多个分隔符。 比如,在上面的例子中,分隔符可以是点,逗号,分号或者是空格,并且后面紧跟着任意个的空格。 只要这个模式被找到,那么匹配的分隔符两边的实体都会被当成是结果中的元素返回。 返回结果为一个字段列表,这个跟str.split()
返回值类型是一样的, 但是如果字符串两边有空格的话,需要先进行str.strip
操作,然后再进行re.split()
操作即可。
当你使用re.split()
函数时候,需要特别注意的是正则表达式中是否包含一个括号捕获分组。 如果使用了捕获分组,那么被匹配的文本也将出现在结果列表中。比如,观察一下这段代码运行后的结果:
>>> string = re.split(r'(;|,|s)s*', info)
>>> string
['My', ' ', 'host', ' ', 'ip', ' ', 'address', ' ', 'is', ' ', '10.0.1.10', ',', 'hwaddress', ' ', 'is', ' ', '52:5
4:00:B7:7A:0A', ' ', '']
获取分割字符在某些情况下也是有用的。 比如,你可能想保留分割字符串,用来在后面重新构造一个新的输出字符串:
>>> line = 'asdf fjdk; afed, fjek,asdf, foo'
>>> 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'
如果你不想保留分割字符串到结果列表中去,但仍然需要使用到括号来分组正则表达式的话, 确保你的分组是非捕获分组,形如(?:...)
, 比如:
>>> line = 'asdf fjdk; afed, fjek,asdf, foo'
>>> re.split(r'(?:,|;|s)s*', line)
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何在 PHP 中使用和管理 Cookie
- 玩转 PhpStorm 系列(九):代码调试篇(上)
- 在 PHP 中使用和管理 Session
- STC51单片机中断与定时器配置参考
- 玩转 PhpStorm 系列(十):代码调试篇(下)
- STM32字符串转整数
- Java常用设计模式--代理模式(Proxy Pattern)
- 详解爬取搜狐号自媒体的所有文章
- 笑了,面试官问我知不知道异步编程的Future。
- ES6之let和const命令
- [Python] 豆瓣自动回帖、顶帖源码
- 基于OpenMV的人脸识别,支持人脸注册、人脸检测、人脸识别
- FatFs检测并建立多层目录并更改文件名
- Docker安装harbor仓库、更改端口、跨服务器访问
- 字符串处理算法题 -> 替换空格