以下是我正在阅读的.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(' ')
来摆脱空间,但对于大文件,我认为这样效率很低。
答案 0 :(得分:2)
您不需要使用这个复杂的正则表达式进行拆分,更简单的是:
result = re.split('\s+', x)
result
# ['Wild_lions', 'live', 'mostly', 'in', '“Africa”']
\s+
将匹配任意数量的任何空格(制表符,空格,换行符等)。
如果您只需按字母顺序匹配,最好将re.compile
与findall
一起使用。
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
将匹配前的子字符串和匹配后的字符串(直到下一个匹配项或字符串结尾)添加到其输出中。在这种情况下,之后的子字符串是空字符串,因此报告输出。
其他答案提供了解决方案以获取您想要的行为,因此我不会在此答案中重复这些操作。