[英]How to remove all non-alphabetic characters from a string?
我一直在开发一个程序,它将采用一个十六进制文件,如果文件名以“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”之后的字符,它们的长度会有所不同,所以我只剩下那部分。
我感谢任何人能给我的任何帮助。
删除字符串中非字母字符的一种方法是使用正则表达式 [ 1 ]。
>>> import re
>>> re.sub(r'[^a-z]', '', "lol123\t")
'lol'
编辑
第一个参数r'[^az]'
是捕获将要删除r'[^az]'
内容的模式(此处,通过将其替换为空字符串''
)。 方括号用于表示类别(该模式将匹配该类别中的任何内容), ^
是“非”运算符,而az
表示所有小型大写字母字符。 更多信息在这里:
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'
但是,从您在问题中提供的数据来看,您需要的确切过程似乎比“摆脱非字母字符”要复杂一些。
您可以使用filter
:
import string
print(''.join(filter(lambda character: character in string.ascii_letters + string.digits, '(ABC), DEF!'))) # => ABCDEF
你在评论中提到你把绳子归结为Sun Tan SpecialistFEFFBFFECDOutfitDFBECFECAFEAFADont get burned
从本质上讲,此时您的目标是删除所有未紧跟小写字母的大写字母,因为 Upper Lower 表示短语的开头。 您可以使用 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 专家 不要被烫伤
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.