Python使用hex \ x00删除空格后的所有内容

时间:2012-06-02 15:34:39

标签: python string

我有一个长度未知的变量字符串,左边有重要的字符串,右边有不重要的东西,用一个空格隔开。如何删除右侧不重要的信息?

我尝试过rstrip,但没有成功。

修改:我会放置需要修复的实际值。

"NPC_tester_contact() ) ntact()                                                                                                                                                                                                                 "

第一个空间(左边的一个空格)应该包含自己被标记为不重要的所有内容。

修改:输出应为“NPC_tester_contact()”!

仔细看看我放在上面的字符串。它后面还有很多空格。我认为这就是造成打嗝的原因。

我在这里尝试过大多数解决方案,他们要么不做任何事情,要么只生产空白。

repr(s)给了我。

'NPC_me_lvup_event_contact()\x00t()\x00act()\x00act()\x00ntact()\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

应该是“NPC_me_lvup_event_contact()”。

谢谢!

也许这是一个更好的问题。有没有办法删除字符串中显示的第一个\ x00十六进制后的所有字符?

出于某种原因,它有时会起作用,并不总是有效。上面的例子是用Levon发布的方法完成的。

解决方案:问题解决了。这更像是一个空字节而不是一个空格字节。解决方案可能是以下任何一种,使用“\ x00”作为标识符而不是“”。

谢谢大家!

9 个答案:

答案 0 :(得分:9)

更新基于字符串数据:

假设s包含您的字符串:

s.split('\x00')[0]

产量

'NPC_me_lvup_event_contact()'

split()将为您提供由您使用split指定的字符分隔的字符串列表。如果没有指定空格,则在这种情况下我们使用您感兴趣的十六进制字符。

答案 1 :(得分:2)

USE split('')[0]

 >>> a = 'aaa bbb'
    >>> a.split(' ')[0]
    'aaa'
    >>> >

答案 2 :(得分:1)

>>> mystring = 'important useless'
>>> mystring[:mystring.find(' ')]
'important'

答案 3 :(得分:1)

split()w / o分隔符按任何空格分割:

>>> "asdasd         xyz".split()[0]
'asdasd'

答案 4 :(得分:0)

使用split()函数,并获取它返回的第一个项目:

raw_string = 'NPC_tester_contact() ) ntact()  '
important = raw_string.split(' ')[0]

将返回:

NPC_tester_contact()

答案 5 :(得分:0)

str = "important unimportant"
important = str.split(' ')[0]

答案 6 :(得分:0)

试试这个:

lhs,rhs=s.split()  #lhs is what you want.

仅当实际上只有一个空格时才有效。

否则,你可以获得lhs(但你失去了rhs):

lhs=s.split()[0]

答案 7 :(得分:0)

试试这个, 将假设您的字符串存储在str print str[0:str.index(" ")]

评论如果它不起作用,将解决它..

这是

My code
str = "NPC_tester_contact() ) ntact()                                                                                                                                                                                                                 "
print str[0:str.index(" ")] output NPC_tester_contact() link http://ideone.com/i9haI

如果您希望输出包含双引号,那么 `print'“',str [0:str.index(”“)],'”'

答案 8 :(得分:0)

你也可以使用正则表达式解决方案。类似的东西:

import re

input_string = 'NPC_me_lvup_event_contact()\x00t()\x00act()\x00act()\x00ntact()\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

string_pat = re.compile(r'[a-zA-Z0-9\(\)_]+')
try:
    first_part = string_pat.findall(input_string)[0]
except IndexError:
    # There is nothing of interest for you in this string
    first_part = ''