问题
将一个字符串分割为多个字符串,但是分隔符(还有周围的空格)并不是固定的。
解决方案
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']
网友评论