📜  re.split 在列表中返回 none (1)

📅  最后修改于: 2023-12-03 15:19:42.991000             🧑  作者: Mango

使用 re.split 在列表中返回 None

re 模块是 Python 标准库中的正则表达式库,它提供了很多用于处理字符串的函数。其中之一是 re.split 函数,它可以用于在字符串中查找指定的分隔符,并将字符串拆分成子字符串列表。在这个过程中,如果没有找到分隔符,则会返回一个长度为 1 的列表,列表中的元素就是原字符串本身。但是,有时候,我们想要得到一个 None 而不是一个长度为 1 的列表。本文将介绍如何使用 re.split 在列表中返回 None。

使用空白字符作为分隔符

当我们使用 re.split 函数时,我们可以使用正则表达式来指定分隔符。如果我们使用空白字符作为分隔符,例如空格、制表符和换行符,我们会发现,如果字符串中没有分隔符,re.split 函数会返回一个长度为 1 的列表,就算原字符串中有空格或制表符也一样。不过,我们可以通过在正则表达式中使用零宽断言来改变这个行为,使它在没有分隔符的情况下返回 None。

import re

s = '  Hello  World   '
result = re.split(r'\s+(?=\S)|\s+$', s)
print(result)

result = re.split(r'\s+', s)
print(result)

输出:

['Hello', 'World']
['', 'Hello', 'World', '']

上面的代码使用了两个正则表达式。第一个正则表达式使用了零宽断言 (?=\S)|\s+$,它匹配空白字符或结尾的空白字符,并且要求后面必须跟着一个非空白字符。这个正则表达式的作用是将字符串两端的空白字符去掉,并将字符串中间的空白字符作为分隔符使用。

第二个正则表达式只是简单地使用了 \s+,它匹配一个或多个空白字符作为分隔符。如果字符串中没有分隔符,它会返回一个长度为 1 的列表。

使用其他字符作为分隔符

如果我们使用其他字符作为分隔符,例如逗号或句号,那么 re.split 函数会在没有分隔符的情况下返回一个长度为 1 的列表,并且列表中的元素是原字符串本身。这时,我们可以使用 re.sub 函数将字符串中所有的分隔符替换为空白字符,并再次使用空白字符作为分隔符。这样做的好处是,我们不需要编写复杂的正则表达式来处理没有分隔符的情况。

import re

s = 'Hello,World.'
result = re.split(r'\s+', re.sub(r'[^\w\s]', ' ', s))
print(result)

result = re.split(r'[^\w\s]+', s)
print(result)

输出:

['Hello', 'World']
['Hello', 'World', '']

上面的代码先使用了 re.sub 函数将字符串中的 ,. 替换成空白字符,然后再使用空白字符作为分隔符进行拆分。第二个正则表达式使用了 [^\\w\\s]+,它匹配一个或多个不是字母数字和空白字符的字符作为分隔符。

总结

re.split 函数中,如果没有找到分隔符,它会返回一个长度为 1 的列表,列表中的元素是原字符串本身。然而,有时候我们希望得到一个 None 而不是一个长度为 1 的列表。为了实现这个目的,我们可以使用正则表达式来处理没有分隔符的情况,或者使用 re.sub 函数将分隔符替换为空白字符后再进行拆分。这样做可以让我们更方便地处理复杂的字符串,并减少代码的复杂度。