删除混合的换行符和数字

remove mixed new line characters and digits

提问人:George 提问时间:11/1/2023 更新时间:11/1/2023 访问量:91

问:

假设我有这个字符串列表:

a = ['6306\nHLIAN\nVARIOUS',
 '10215\nSPINA',
 '10279\nPIPERI-\nΜYTER',
 '38003\nCORN\nSWEET',
 '10234ROKA',
 '10232\nANTH',
 '8682PIPER\nYPAITH',
 '8676\nMAROYL',
 '10211\nΚAROT\nROOT',
 '8685AGG\nYPAU']

我想删除数字并保留第一条单词。所以,我想要结果:

['HLIAN',
 'SPINA',
 'PIPERI',
 'CORN',
 'ROKA',
 'ANTH',
 'PIPER',
 'MAROYL',
 'ΚAROT',
 'AGG']

我尝试了这样的事情:

from string import digits

def clean_list(data):
    remove_digits = str.maketrans('', '', digits)
    no_digs =  [s.translate(remove_digits) for s in data]
    results = []
    for x in no_digs:
        if '\n' in x:
            if x.count('\n') == 2:                
                results.append(x.split('\n')[-2])
            elif x.count('\n') == 1:
                results.append(x.split('\n')[1])
        else:
            results.append(x)
    return results

我正在收到:

['HLIAN',
 'SPINA', 
'PIPERI-', 
'CORN',
 'ROKA', 
'ANTH', 
'YPAITH',
 'MAROYL',
 'ΚAROT', 
'YPAU']

我抓不住 and,因为它们之间有一两个词。'8682PIPER\nYPAITH','8685AGG\nYPAU'\n

此外,如果没有符号,那就太好了(不过可以在下一步中完成)。'PIPERI-'-

Python 字符串 列表

评论


答:

2赞 Guy 11/1/2023 #1

删除数字后仅取字符串,并在拆分后取第一个字符串strip()\n

def clean_list(data):
    remove_digits = str.maketrans('', '', digits)
    no_digs = [s.translate(remove_digits).strip() for s in data]
    results = [x.split('\n')[0] for x in no_digs]
    return results

您可以添加到拆分结果中以删除 .replace('-', '')-

results = [x.split('\n')[0].replace('-', '') for x in no_digs]
1赞 RomanPerekhrest 11/1/2023 #2

使用单遍历和正则表达式匹配:

import re

pat = re.compile(r'^\d+\n?([a-z]+)', flags=re.I)
result = [pat.search(s).group(1) for s in a]
print(result)

['HLIAN', 'SPINA', 'PIPERI', 'CORN', 'ROKA', 'ANTH', 'PIPER', 'MAROYL', 'KAROT', 'AGG']

评论

0赞 George 11/1/2023
结果给出:NoneType' 对象没有属性'group''
1赞 RomanPerekhrest 11/1/2023
@George,这是因为您的条目在其子字符串中包含非字符串字符。重新键入它 (to ) 并查看它是否有效'10211\nΚAROT\nROOT'ΚAROT'10211\nKAROT\nROOT'
0赞 George 11/1/2023
你是对的。谢谢!(UPV)