美文网首页
Python3 - 使用多个分割符分割字符串

Python3 - 使用多个分割符分割字符串

作者: 惑也 | 来源:发表于2018-12-18 14:07 被阅读39次

问题

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

解决方案

string 对象的 split() 方法只适应于非常简单的字符串分割情形, 它并不允许有多个分隔符或者是分隔符周围不确定的空格。 当需要更加灵活的切割字符串的时候,最好使用 re.split() 方法:

import re

line = 'asdf fjdk; afed, fjek,asdf, foo'

ln1 = re.split(r'[;,\s]\s*', line)    # 正则匹配:1、分号、逗号、空格中任意一个;2、匹配任意个空格
print(ln1) 
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']

函数 re.split()允许为分隔符指定多个正则匹配模式,匹配的分隔符两边的实体,都会被当成是结果中的元素返回。 返回结果为一个字段列表,这个跟 str.split() 返回值类型是一样的。

讨论

当使用 re.split() 函数时,通过对正则表达式中匹配部分加括号,可以将被匹配的文本也返回在结果列表中。比如:

ln2 = re.split(r'([;,\s])\s*', line)
print(ln2)

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

如果不想保留分割字符串到结果列表中,但仍然需要使用括号来分组正则表达式, 则需要确保分组是非捕获分组,形如 (?:...) 。比如:

ln3 = re.split(r'(?:[;,\s]\s*)', line)
print(ln3)

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

相关文章

网友评论

      本文标题:Python3 - 使用多个分割符分割字符串

      本文链接:https://www.haomeiwen.com/subject/mfdkkqtx.html