删除python中包含字母和数字的字符串

时间:2018-01-12 09:46:55

标签: python preprocessor isalpha

我有一个字符串

c=("Snap-on Power M1302A5 Imperial,IMPRL 0.062IN")

我需要将上面的字符串转换为

c=("Snap-on Power Imperial,IMPRL")

,即我需要删除包含字母和数字的字符串,

我怎么能在python中做到这一点?

我试过

c=c.apply(word_tokenize)
c = c.apply(lambda x: [item for item in x if item.isalpha()])

但得到了输出

c=("Snap-on Power MA Imperial,IMPRL IN")

5 个答案:

答案 0 :(得分:3)

我不确定你到底想要什么,但似乎你想删除里面有数字的单词。在这种情况下,您可以在此处使用any()

>>> c = "Snap-on Power M1302A5 Imperial,IMPRL 0.062IN"
>>> ' '.join(w for w in c.split() if not any(x.isdigit() for x in w))
Snap-on Power Imperial,IMPRL

答案 1 :(得分:3)

同时添加基于regex的解决方案:

c = "Snap-on Power M1302A5 Imperial,IMPRL 0.062IN"
only_a = []
for word in c.split():
    #print(word)
    if not re.search('\d',word):
        #print(word)
        only_a.append(word)
' '.join(only_a)

输出:'Snap-on Power Imperial,IMPRL'

答案 2 :(得分:1)

选择没有数字的单词

c = ' '.join([item for item in c.split() if not any(filter(str.isdigit, item))])
# ['Snap-on', 'Power', 'Imperial,IMPRL']

答案 3 :(得分:1)

这个答案与其他答案完全相同

步骤1:将字符串拆分为不同的单词

步骤2:检查每个单词是否包含数字,如果它确实跳过单词

步骤3:从没有数字的单词生成字符串

line = "Snap-on Power M1302A5 Imperial,IMPRL 0.062IN"

split_line = line.split(" ")

final_split_string = []

for word in split_line:
    skip_word = False
    for letter in word:
        if letter.isdigit():
            #check if the current word contains a number
            skip_word = True

    if not skip_word:
        #skip a word if it contains number
        final_split_string.append(word)

final_string = " ".join(final_split_string)

答案 4 :(得分:0)

您可以尝试这样的事情:

c="Snap-on Power M1302A5 Imperial,IMPRL 0.062IN"
import re
pattern=r'\d'

final=[]
for i in c.split():
    if isinstance(i.split(','),list):
        for m in i.split(','):
            if re.search(pattern,m):
                pass
            else:
                final.append(m)

print(" ".join(final))

输出:

Snap-on Power Imperial IMPRL
相关问题