从列表中删除非字母字符并维护structu

2024-09-28 19:06:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用Python2.7。我想删除列表中每个列表中的非字母字符,而不修改列表的结构。在

起始列表示例:

csvarticles = [['[Beta-blockers]', 'Magic!', '1980', 'Presse medicale'],['Hypertension in the pregnant woman].', '', '2010', 'Medical'],['Arterial hypertension.', '', '1920', 'La Nouvelle']]
print (csvarticles[0])

期望输出:

[['beta blockers', 'magic', '1980', 'presse medicale'],['hypertension in the pregnant woman', '', '2010', 'medical'],['arterial hypertension', '', '1920', 'la nouvelle']]

代码1:

^{pr2}$

代码1输出:

['[Beta-blockers]', 'Magic!', '1980', 'Presse medicale'] [['[beta-blockers]'], ['magic!'], ['1980'], ['presse', 'medicale']]

代码2:

csvarticles = [[word.lower().split() for word in nodeList if word.isalpha()] for nodeList in csvarticles]

代码2输出:

[]

代码3:

articleTitle = []
for x, y in enumerate(csvarticles):
    myString = simpleWords(csvarticles[x][0])
    if myString is not '':
        myString = myString.lower()
        myString = re.sub('[\W_]+', ' ', myString, flags=re.UNICODE)
        myList = [word for word in myString.split() if len(word) > 3]
        articleTitle = ' '.join(myList)

代码3输出:

['beta blockers', 'magic', '1980', 'presse medicale', 'hypertension pregnant woman', '2010', 'medical', 'arterial hypertension', '1920', 'nouvelle']

代码3接近,但消除了嵌套列表的结构。在


Tags: 代码in列表formagicbetawordmystring
3条回答

使用字符串.isalnum()检查字符串是字母表还是数字的方法。在

演示

csvarticles = [['[Beta-blockers]', 'Magic!', '1980', 'Presse medicale'],['Hypertension in the pregnant woman].', '', '2010', 'Medical'],['Arterial hypertension.', '', '1920', 'La Nouvelle']]
res = []
for i in csvarticles:
    r = []
    for j in i:
        r.append("".join([k for k in j if (k.isalnum() or k.isspace())]).lower())
    res.append(r)
print(res)

输出

^{pr2}$

您需要替换非空格或字母数字字符,并修剪/小写字符串。Regex对于那些用str.strip链接的替换非常有效。在

在双列表组件中重新生成嵌套列表:

import re

csvarticles = [['[Beta-blockers]', 'Magic!', '1980', 'Presse medicale'],['Hypertension in the pregnant woman].', '', '2010', 'Medical'],['Arterial hypertension.', '', '1920', 'La Nouvelle']]

result = [[re.sub("[^ \w]"," ",x).strip().lower() for x in y] for y in csvarticles]

print(result)

印刷品:

^{pr2}$

如果使用Python,请将lower替换为casefold,以处理特殊的语言环境字符

如果您想在一行代码中执行此操作:

输入:

output = [[k.lower() for k in [' '.join(re.findall(r'[^\]\[.!-][A-z0-9]+[^\]\[.!-]', j)) for j in i]] for i in csvarticles]

输出:

^{pr2}$

正则表达式:

[^\]\[.!-][A-z0-9]+[^\]\[.!-]

相关问题 更多 >