2012-06-02 3 views
1

왼쪽에 중요한 문자열이 있고 오른쪽에 중요하지 않은 것들이 하나의 공백으로 분리 된 가변 길이의 문자열이 있습니다. 중요하지 않은 정보는 어떻게 오른쪽에서 제거합니까?파이썬은 16 진수 x00을 가진 공백 뒤에 모든 것을 제거합니다.

나는 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"을 식별자 대신 ""대신 사용하는 것입니다.

모두 감사합니다! 새로운 문자열 데이터를 기반으로

+0

여기에 코드를 표시 할 수 있습니까? 저기서 무슨 일이 벌어지고 있는지 보는데 도움이 될 것입니다. – Andbdrew

+0

modelfile = stringdb.read (256) 이외의 다른 코드가 없습니다. – user1150764

+0

@ user1150764 여기서 stringdb는 어디서 오는가? – Andbdrew

답변

8

UPDATE :

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

'NPC_me_lvup_event_contact()' 

split() 당신에게로 구분 된 문자열 목록을 줄 것이다 산출 :

s 가정은 문자열을 포함 당신이 지정한 성격 y는 split입니다. 지정되지 않은 공간이 사용되면이 경우 우리는 관심이있는 16 진수 문자를 사용합니다.

+0

메서드에서 공백 만 표시됩니다. 이 문자열의 뒤쪽에는 많은 공백이 있습니다. – user1150764

+0

@ user1150764 매우 이상하게 들리지만, 입력에 대해 생성 된 출력을 포함하여이를 해석기에서 바로 복사하고 있습니다. 내 코드를 복사하고 있습니까? – Levon

+0

감사합니다. 혼란을 드려 죄송합니다. :) 바이너리 데이터를 처리 할 때는 16 진수를 사용해야합니다. – user1150764

2

사용 분할 ('') [0]

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

이것은 작동하지 않았습니다. :( – user1150764

0

분할() 함수를 사용하고 반환하는 첫 번째 항목을 얻을 :

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

반환됩니다

NPC_tester_contact() 
1
>>> mystring = 'important useless' 
>>> mystring[:mystring.find(' ')] 
'important' 
+0

이것은 작동하지 않았습니다.: ( – user1150764

+0

그것은 나를 위해 작동합니다 :) – Andbdrew

+0

@ user1150764 - 다시 시도하십시오, 잘 작동합니다;) – fraxel

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

str은 내장 된 이름이므로 변수에 사용하지 마십시오. – jamylak

0

시험해보기 :

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

이것은 실제로 공간이 하나 뿐인 경우에만 작동합니다.

그렇지 않으면, 당신은에 의해 lhs를 얻을 수 있습니다 (하지만 당신은 우를 잃게) :

lhs=s.split()[0] 
1

분할() w를 구분 분할/O를 공백으로 :

>>> "asdasd   xyz".split()[0] 
'asdasd' 
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

이며, 당신이 원하는 경우 출력은 큰 따옴표 다음 '인쇄' '', str을 [0 포위 할 : str.index ("")), ' "'

+0

여기에 데모 용 chk가 있습니다. http://ideone.com/ml6Hi –

+0

이것은 작동하지 않습니다. 위에 게시 한 예제 문자열로 시도 했습니까? 따옴표 사이의 모든 문자를 사용하십시오! – user1150764

+0

오케이, 나는 이것을 코드화하여 링크를 줄 것이다. –

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 = ''