python(48):re.split 多分隔符

摘要:
line='asdffjdk;Re.split(r'[;line)['asdf','o']函数Re.splite()非常实用。fields=re.split(r'(;|s)s*',line)&gt,fields['asdf';'o']在某些情况下,获取分割字符也很有用,values=fields[;2]+['']>值['asdf';'o']&gt,';

问题描述:

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

问题

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

解决方案

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(48):re.split 多分隔符》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Luci实现框架C#6.0语言规范(十二) 数组下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL Server 本地数据库登录不上 解决方法

sql本地数据库登录不了的话。先看看自己计算机 服务 SQL server  (MSSQLSERVER)  没有打开的话,请打开。 今天说的情景模式是  你误删了windows登录;禁用了sa登录;sa密码忘记了;或是你计算机名字被公司修改了,老的名字忘记了;又或是你用的别人的之前安装好的SQL数据库,终归,你本地数据库登录不了,用不了,拉了胯。   1...

Qt5学习笔记(5)——列表框QListWidget类

QListWidget可以显示一个清单,清单中的每个项目是QListWidgetItem的一个实例,每个项目可以通过QListWidgetItem来操作。可以通过QListWidgetItem来设置每个项目的图像与文字。 常用方法和属性: (1)addItem void addItem ( const QString & label ) void...

Python全栈开发:list、元祖常用方法操作

列表[] 索引与切片#例题#li = ['yijiajun',[1,3,5,7,9],'zhangliang','zhaoritian','sunwukong']# #例子1 找出列表中索引为0的元素# l1 = li[0]# print(l1)# 结果输出:# yijiajun# #例子2 找出列表中索引为1的元素# l2 = li[1]# prin...

PyMySQL模块

  PyMySQL是Python操作数据库的模块,在Python3.x版本中用于连接MySQL服务器,即作为Python操作MySQL数据库对象的接口。 安装PyMySQL   pip3 install PyMySQL 导入PyMySQL   import pymysql 连接数据库   格式:conn = pymysql.connect(host=' '...

09mybatis属性和数据库字段不匹配处理

Book.java id name price book 表 book_id book_name book_price create table book( book_id int unsigned auto_increment, book_name varchar(20), book_price decimal(8,2), primary key(bo...

ant design pro项目配置路由菜单

有两种菜单格式,一种是就只有一层,一种是有多层的 一、单层的菜单  首先在pages目录下新建一个文件目录  然后在config.js中进行配置 { name: 'new_test', icon: 'table', path: '/new_test', component: './TestRoute/test_rout...