re.split后的空白字符

时间:2017-04-17 08:21:50

标签: python regex split expression

以下是我正在阅读的.txt文件中的一行,我将其分配给x

x = "Wild_lions live mostly in “Africa”"
result = re.split('[^a-zA-Z0-9]+', x)

我最终得到了:

['Wild', 'lions', 'live', 'mostly', 'in', 'Africa', ''] # (there's an empty space character as the last element)

为什么最后会有空的空间?我意识到我可以做result.remove(' ')来摆脱空间,但对于大文件,我认为这样效率很低。

3 个答案:

答案 0 :(得分:2)

您不需要使用这个复杂的正则表达式进行拆分,更简单的是:

result = re.split('\s+', x)
result
# ['Wild_lions', 'live', 'mostly', 'in', '“Africa”']

\s+将匹配任意数量的任何空格(制表符,空格,换行符等)。

如果您只需按字母顺序匹配,最好将re.compilefindall一起使用。

myre = re.compile('[a-zA-Z]+')
myre.findall(x)
# ['Wild', 'lions', 'live', 'mostly', 'in', 'Africa']

答案 1 :(得分:2)

试试这个:

x = "Wild_lions live mostly in 'Africa'"
result = re.split('[\s_]+', x)

你会得到:

['Wild', 'lions', 'live', 'mostly', 'in', "'Africa'"]

答案 2 :(得分:1)

模式[^a-zA-Z0-9]+将提供的字符串拆分为任何字符或非数字或ASCII字母的字符序列。

示例字符串中的最后一个字符与拆分模式匹配。 re.split将匹配前的子字符串和匹配后的字符串(直到下一个匹配项或字符串结尾)添加到其输出中。在这种情况下,之后的子字符串是空字符串,因此报告输出。

其他答案提供了解决方案以获取您想要的行为,因此我不会在此答案中重复这些操作。