更改列表中的元素

时间:2014-02-15 22:29:56

标签: python regex list

所以给出一个列表,例如

lines = ['This', 'is', 'a', 'sentence.']

我需要删除单词开头和结尾的所有标点符号。在这种情况下,'。'来自'句子。'。

这就是我现在正在使用的内容:

lines = line.strip().split()
for l in lines:
    l = re.sub(r'^[^A-Za-z0-9]*|[^A-Za-z0-9]*$','', l)
words.append(lines)

我知道正则表达式正在工作(通过在循环中使用print(l)来检查它),但是当我打印出行(即在循环之外)时,标点符号仍然存在!我的代码出了什么问题。

这应该附加到单词:

lines = ['This', 'is', 'a', 'sentence']

2 个答案:

答案 0 :(得分:2)

您需要将处理后的文本放回列表中;字符串是不可变的,它们不能就地更改。例如:

for i, l in enumerate(lines):
    lines[i] = re.sub(r'^[^A-Za-z0-9]*|[^A-Za-z0-9]*$','', l)

或列表理解版本:

lines = [re.sub(r'^[^A-Za-z0-9]*|[^A-Za-z0-9]*$','', l) for l in lines]

答案 1 :(得分:1)

这看起来很愚蠢......为什么我们使用正则表达式?

import string
lines = [word.strip(string.punctuation) for word in line.split()]