提问人:George 提问时间:11/1/2023 更新时间:11/1/2023 访问量:91
删除混合的换行符和数字
remove mixed new line characters and digits
问:
假设我有这个字符串列表:
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-'
-
答:
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)
评论