在python中删除特定单词后的rest字符串

在python中删除特定单词后的rest字符串,python,Python,如果\x包含在字符串中,我想删除该字符串中的单词。我正在尝试这个 text = "Joe is \xd8\xae\xd8\xa7\ a boy." sep = "\x" rest = text.split(sep, 1)[0] print(rest) 但它给了我们 SyntaxError:(unicode错误)'UnicodeScape'编解码器无法解码位置0-1中的字节:截断\xXX转义 对字符串使用r,将其视为原始字符串。因此,转义码将被忽略 text = r"Joe is \xd8\x

如果
\x
包含在字符串中,我想删除该字符串中的单词。我正在尝试这个

text = "Joe is \xd8\xae\xd8\xa7\ a boy."
sep = "\x"
rest = text.split(sep, 1)[0]
print(rest) 
但它给了我们

SyntaxError:(unicode错误)'UnicodeScape'编解码器无法解码位置0-1中的字节:截断\xXX转义


对字符串使用
r
,将其视为原始字符串。因此,转义码将被忽略

text = r"Joe is \xd8\xae\xd8\xa7\ a boy."
sep = r"\x"
list=text.split(" ")
t=" "
for i in list:
        temp=i.split(sep)
        if len(temp) < 2:
                t+=' '+i
print t

如果只想打印有效的ASCII字符

text = "Joe is \xd8\xae\xd8\xa7\ a boy."
filtered = ''

for x in text:
    try:
        x.encode('ascii')
        filtered += x
    except:
        continue
print(filtered)
输出

乔是个男孩

如果只想筛选有效的字母字符,可以使用.isalpha()。如果您也想允许使用数字字符,可以使用.isalnum()而不是.isalpha()\x是转义字符,所以您的方法将不起作用

text = "Joe is \xd8\xae\xd8\xa7\ a boy."
filtered = ''

for x in text:
    if x.isalpha() or x.isspace():
        filtered += x
print(filtered)
输出

乔是个男孩

更新

编辑 如果上述两种方法不适用于您,并且您只希望Joe是男孩作为输出

输出

乔是个男孩

也可以使用正则表达式

“\x”不被认为是字符,你应该把测试字符串的原始字符串做成“\x”作为字符:

text = r"Joe is \xd8\xae\xd8\xa7\ a boy."
sep = r"\x"
rest = text.split(sep, 1)[0]
print(rest) 
编辑

乔是个男孩:

text = r"Joe is \xd8\xae\xd8\xa7\ a boy."
sep = r"\x"
text=text.split(" ")
rest=[i for i in text if sep not in i]
output=" ".join(rest)
print(output) 

更新:您澄清了您确实在试图从字符串中删除不可打印的字符

import re

text = "Joe is \xd8\xae\xd8\xa7\ a boy."
#                              ^
#            stray backslash --|
sep = r'[^\x20-\x7e]' # Any non-printable character
rest = re.sub(sep, '', text)
# rest = 'Joe is \\ a boy.'
print(rest)
# Joe is \ a boy.
反斜杠在那里是因为它在您的输入中


Python试图将下面字符串中的
\x
解释为使用十六进制值插入字符的命令

    sep = "\x"
         ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \xXX escape
要解决此问题,请按如下方式退出反斜杠:

sep = "\\x"
sep = r"\x"
或者更好地使用如下原始字符串:

sep = "\\x"
sep = r"\x"
它告诉Python不要在字符串中展开
\x


如果您试图拆分不可打印的字符

import re

text = "Joe is \xd8\xae\xd8\xa7\ a boy."
# Not(^) a printable ascii character (0x20 - 0x7e)
sep = r'[^\x20-\x7e]'
first_part, rest = re.split(sep, text, maxsplit=1)
print(first_part)

如果您真的在寻找文本
'\x'

# Raw (r'') strings will not evaluate your backslash in this
# string.
sep = r'\x'
first_part, rest = text.split(sep, maxsplit=1)
print(first_part)

字符串中的\x是unicode转义而不是文字\x\x后跟nothing是无效的转义,因此python会抱怨。
\x
实际上不在字符串中。。。XY问题?是否要从输出中筛选出“奇异”字符?一种解决方法是使用原始字符串
text=r“Joe是\xd8\xae\xd8\xa7\a男孩。”
sep=r“\x”
有关转义序列的表格,请参阅……请更新您的问题,了解您真正想要的/意思。您对Joe is a boy的预期输出的评论与您的问题不匹配。另外,你想把
放在句子的末尾吗?“一个男孩”前面的反斜杠怎么办?输出是错误的。在我的IDE上,它打印为
Joe isØØa boy
,但我需要
Joe is a boy
使用我提供的更新程序,其中检查ascii字符已完成您尝试了上述两种方法中的哪一种?第一个还是第二个?第一个程序正在打印
乔是一个男孩。
第二个程序
乔是一个男孩
。同时运行这两个方法。一个接一个。只需在第二个方法之前更改text=filtered。让我知道同时使用第一种和第二种方法是否有效。@waqas现在试试这个