如何将列表的多个元素传递给re.split()函数?

时间:2017-04-26 17:45:48

标签: python regex python-2.7

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

用" print"它运行得很好,但是当我尝试在re.split()内部做同样的事情时,我得到一个错误" TypeError:期望的字符串或缓冲区"

4 个答案:

答案 0 :(得分:0)

为什么不呢:

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

split函数需要一个字符串,然后根据正则表达式将其拆分为子字符串并作为列表返回。传递清单并不是很有意义。如果您希望它获取字符串列表并单独拆分每个字符串元素然后返回字符串列表列表,那么您必须自己执行此操作:

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

答案 1 :(得分:0)

我认为你正在寻找join,即:

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

注意:
不需要re模块,split()就足够了。

答案 2 :(得分:0)

如您所见,您在函数调用中得到<figure id="LoadVideo"> <button type="button" onclick="scrollDown()"> Scroll Down</button> <script> function scrollDown(){ window.scrollTo(0,500); } </script> <video id="LoadVid" autoplay src="images/LoadVid.mov" type="video/mov"> </video> </figure>,这意味着您从函数期望中传递了错误的参数。所以你需要考虑一下你传递的是什么。

如果您有调试器或IDE,您可以单步执行查看参数的类型,甚至可以使用TypeError进行打印,通过

type

返回

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

因此您需要将其转换为String。列表中的每个元素都是一个String,因此请考虑一种从列表中获取每一行的方法。一个例子是

<class 'list'>

我使用list comprehension逐步浏览words = [re.split('\s+', line) for line in lines] 并单独处理每一行。

答案 3 :(得分:0)

您的re.split('\s+', line)相当于line.split(),因此您可以写

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

请参阅documentation for str.split