2

我有一个字符串

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")
4

5 回答 5

5

我不确定你到底想要什么,但似乎你想删除其中有数字的单词。在这种情况下,您可以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
于 2018-01-12T10:03:12.130 回答
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'

于 2018-01-12T10:10:12.313 回答
1

选择没有数字的单词

c = ' '.join([item for item in c.split() if not any(filter(str.isdigit, item))])
# ['Snap-on', 'Power', 'Imperial,IMPRL']
于 2018-01-12T10:02:57.947 回答
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)
于 2018-01-12T10:05:26.110 回答
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
于 2018-01-12T14:49:52.027 回答