如何从字符串中删除所有非字母字符?

时间:2018-07-27 15:12:01

标签: python hex hexdump

我一直在研究一个将获取十六进制文件的程序,如果文件名以“ CID”开头,则应删除前104个字符,然后再输入几个单词。我也想删除单词后面的所有内容,但问题是我想隔离的部分的长度有所不同。

我的代码当前如下:

y = 0
import os
files = os.listdir(".")

filenames = []
for names in files:
    if names.endswith(".uexp"):
        filenames.append(names)
        y +=1
        print(y)
print(filenames)

for x in range(1,y):
    filenamestart = (filenames[x][0:3])
    print(filenamestart)
    if filenamestart == "CID":
        openFile = open(filenames[x],'r')
        fileContents = (openFile.read())
        ItemName = (fileContents[104:])
        print(ItemName)

输入示例文件(从HxD中提取):

.........................ýÿÿÿ................E.................!...1AC9816A4D34966936605BB7EFBC0841.....Sun Tan Specialist.................9.................!...9658361F4EFF6B98FF153898E58C9D52.....Outfit.................D.................!...F37BE72345271144C16FECAFE6A46F2A.....Don't get burned............................................................................................................................Áƒ*ž

我已经设法删除前104个字符,但是我也想删除'Sun Tan Specialist'之后的字符,这两个字符的长度会有所不同,所以我只剩下那一部分了。

我感谢任何人都能给我的帮助。

3 个答案:

答案 0 :(得分:1)

删除字符串中非字母字符的一种方法是使用正则表达式[1]。

>>> import re
>>> re.sub(r'[^a-z]', '', "lol123\t")
'lol'

编辑

第一个参数r'[^a-z]'是捕获将要删除的内容的模式(此处,通过用空字符串''替换它)。方括号用于表示类别(该模式将匹配该类别中的任何内容),^是“ not”运算符,而a-z表示所有小写字母字母字符。这里有更多信息:

https://docs.python.org/3/library/re.html#regular-expression-syntax

因此,例如,还要保留大写字母和空格:

>>> re.sub(r'[^a-zA-Z ]', '', 'Lol !this *is* a3 -test\t12378')
'Lol this is a test'

但是,根据您在问题中提供的数据,您所需的确切过程似乎比“摆脱非字母字符”复杂得多。

答案 1 :(得分:0)

您在评论中提到将字符串简化为Sun Tan SpecialistFEFFBFFECDOutfitDFBECFECAFEAFADont get burned

基本上,您目前的目标是删除所有紧随其后的小写字母的大写字母,因为大写小写指示短语的开头。您可以使用for循环来做到这一点。

import re

h =  "Sun Tan SpecialistFEFFBFFECDOutfitDFBECFECAFEAFADont get burned"

output = ""
for i in range(0, len(h)):
    # Keep spaces
    if h[i] is " ":
        output += h[i]
    # Start of a phrase found, so separate with space and store character
    elif h[i].isupper() and h[i+1].islower():
        output += " " + h[i]
    # We want all lowercase characters
    elif h[i].islower():
        output += h[i]

# [1:] because we appended a space to the start of every word
 print output[1:]
 # If you dont care about Outfit since it is always there, remove it
 print output[1:].replace("Outfit", "")

输出:

Sun Tan专家服装不会被烧毁

Sun Tan专家不要被烧毁

答案 2 :(得分:0)

您可以使用filter

import string
print(''.join(filter(lambda character: character in string.ascii_letters + string.digits, '(ABC), DEF!'))) # => ABCDEF