欢迎访问宙启技术站
智能推送

split()函数:了解如何使用正则表达式分割字符串。

发布时间:2023-06-11 13:11:52

split() 函数是 Python 中常用的字符串函数之一,它允许我们将一段文本根据某个分隔符进行分割,并返回一个由分割后的字符串组成的列表。例如:

sentence = "Hello, World! How are you today?"
words = sentence.split(" ")
print(words)

上述代码会将字符串 sentence 根据空格分割,并返回一个包含每个单词的列表:

['Hello,', 'World!', 'How', 'are', 'you', 'today?']

然而这种分割方式有时候并不能完全满足我们的需求。比如,想要根据多个分隔符进行分割,或者只分割字符串中的前几个或后几个单词,这时我们就需要使用正则表达式了。下面是一些常见的使用场景及其相应的正则表达式:

#### 1. 根据多个分隔符分割字符串

使用 split() 函数分割时,我们只能指定一个分隔符,但当我们需要根据多个分隔符进行分割时,可以借助正则表达式的 |(或)运算符解决这个问题。例如,下面的代码可以将一个文本根据空格、逗号和分号进行分割:

import re

text = "Hello, World!; How are you today?"
words = re.split(r'\s|,|;', text)
print(words)

这里的正则表达式 r'\s|,|;' 表示用空格、逗号或分号分割字符串,其中 \s 表示空白字符,| 表示或运算符。这段代码输出的结果如下:

['Hello', 'World!', '', 'How', 'are', 'you', 'today?']

#### 2. 分割前几个或后几个单词

当我们只需要分割字符串中的前几个或后几个单词时,可以通过正则表达式搭配 split() 函数的 maxsplit 参数来实现。例如,下面的代码可以将一个文本根据空格分割,并只保留前三个单词:

import re

text = "Hello, World! How are you today?"
words = re.split(r'\s', text, maxsplit=2)
print(words)

这里的 maxsplit 参数指定了最大分割次数,这里是 2,表示只分割前三个单词,输出结果如下:

['Hello,', 'World!', 'How are you today?']

同理,我们也可以通过使用负数的 maxsplit 参数来保留字符串的后几个单词。例如,下面的代码可以将一个文本根据空格分割,并只保留后三个单词:

import re

text = "Hello, World! How are you today?"
words = re.split(r'\s', text, maxsplit=-2)
print(words)

这里给 maxsplit 参数传入了负数,表示只保留后三个单词,输出结果如下:

['Hello,', 'World!', 'How are']

#### 3. 高级匹配

在某些情况下,我们可能需要更复杂的分割方式。例如,有一个自然语言处理的任务,需要将一个句子分割成短语,但需要保留符号。在这种情况下,我们可以使用正则表达式来进行高级匹配。

比如,下面的代码可以将一个句子根据符号进行分割,但保留分隔符:

import re

sentence = "When I arrived, the train had already left."
phrases = re.split(r'(\W)', sentence)
phrases = [p for p in phrases if p] # 将空的矩阵删掉
print(phrases)

这里的正则表达式 r'(\W)' 匹配任何非字母数字字符,包括空格、逗号、句号、分号等。但括号 ( ) 表示捕获组,表示匹配和选定 (\W) 捕获的模式。输出结果如下:

['When', ' ', 'I', ' ', 'arrived', ',', ' ', 'the', ' ', 'train', ' ', 'had', ' ', 'already', ' ', 'left', '.']

从结果中可以看出,我们成功地将句中的单词和符号进行了分割,并保留了分隔符。

总结:分割字符串是我们在做数据处理时经常会遇到的一个问题。Python 中的 split() 函数固然很好用,但当我们需要更复杂的分割方式时,就需要借助正则表达式了。正则表达式可以让我们更灵活地指定分割规则,在实际的开发中有着广泛的应用。