2017-04-26 61 views
0
f = open('sentences.txt') 
lines = [line.lower() for line in f] 
print lines[0:5] 
words = re.split("\s+", lines[0:5]) 

与“打印”它工作得很好,但是当我尝试做re.split()相同的内部,我得到一个错误“类型错误:预期的字符串或缓冲区”如何将列表的多个元素传递给re.split()函数?

+1

也许不是将五个字符串传入'split',而是用五个单独的字符串调用五次split。 – Kevin

+1

你想做什么? –

+1

听起来有点像[XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 –

回答

0

为什么不干脆:

words = re.split("\s+", ''.join(lines)) 

split函数需要一个字符串,然后根据正则表达式将其拆分为子字符串并作为列表返回。传递一份清单并不会有太大的意义。如果你希望它把你的字符串列表并单独分割每个字符串元素,然后返回一个字符串列表的列表,你必须做你自己:

lines_split = [] 
for line in lines: 
    lines_split.append(re.split("\s+", line)) 
0

我想你搜索对于join,即:

words = "".join(lines[0:5]).split() 

注:
无需re模块,split()就够了。

0

正如你所看到的,你在函数调用中得到TypeError,这意味着你正在传递函数所期望的错误参数。所以你需要考虑你传递的是什么。

如果你有一个调试器或IDE您可以逐步看到什么类型的参数有,甚至使用type打印出来,通过

print(type(lines[0:5])) 

返回

<class 'list'> 

所以你需要将其转换为字符串。列表中的每个元素都是一个String,所以想办法让每一行都不在列表中。我在哪里使用list comprehension到步骤通过lines和单独地处理每一行的一个例子是

words = [re.split('\s+', line) for line in lines] 

0

re.split('\s+', line)line.split()相当于所以你可以写

words = [line.split() for line in lines] 

documentation for str.split

相关问题