2017-04-10 12 views
3
파이썬에서

, 내가 두 자리 또는 하나의 숫자 중 하나의 문자열이 : 문자열의 모든 한 자리에서선행 0을 삽입하기 위해 문자열에서 한 자릿수를 인식하는 방법은 무엇입니까?

8 5E 9C 52 30 0

을, I (예 : 055 변환 그것 앞에 0을 추가하고 싶습니다) 두 자릿수로 만드십시오.

.split(‘ ‘)으로 나누어서 각각 하나씩 확인하고 .zfill(2)을 사용하여 각 한 자리를 두 자리로 변환하는 생각.

내 질문은 문자열의 모든 한자리 수를 인식하고 앞에 오는 0을 삽입하여이 두 문자를 모두 2 자리로 변환하는 방법이 있습니까?

+1

의 재 당신이 다른 방법을 시도하고 빠른 방법이 있는지 알고 싶어 한 건가요 가져 잊지 마세요 ? 당신이 묘사 한 방식이 제가 할 방법입니다. – anonymoose

+0

'split()'시도했거나 다른 방법이 필요합니다 – bhansa

+1

'prefilled = "".join ([my_string.split()에서 x에 대해 x.zfill (2)])' – engineercoding

답변

7

글쎄, zfill(..)의 좋은 점은 콘텐츠에 두 개의 문자가 포함되어 있으면 해당 문자열이 그대로 유지된다는 것입니다. 그래서 당신은 단순히 다시 함께 발전기 (또는 지능형리스트)과 ' '.join(..) 결과를 사용할 수 있습니다

result = ' '.join(x.zfill(2) for x in data.split()) 

생성하는 :

>>> data = '8 5E 9C 52 30 0' 
>>> ' '.join(x.zfill(2) for x in data.split()) 
'08 5E 9C 52 30 00' 
3

지능형리스트와 간단한 솔루션입니다.

코드 :

def pad_hex_str(hex): 
    return ' '.join(['0' + h if len(h) == 1 else h for h in hex.split()]) 

시험 코드 :

hex_str = '8 5E 9C 52 30 0' 
print(pad_hex_str(hex_str)) 

결과 :

08 5E 9C 52 30 00 
0

splitzfill을 사용하면 문제가 없습니다.

st = "8 5E 9C 52 30 0" 
res = "" 
for i in st.split(): 
     res += " " + i.zfill(2) 
print res 

#output 
08 5E 9C 52 30 00 
0
>>> re.sub(r'(\b\d\b)', r'0\1', string) 
>>> '08 5E 9C 52 30 00' 

물론

+0

죄송하지만 학습을 위해 무엇을하는지 설명해 주시겠습니까? 그리고 가져올 필요가있는 것은 무엇입니까? –

+0

조, 다시 정규 표현식을위한 라이브러리입니다. 나는 "수입 재"를 의미합니다. re.sub는 첫 번째 정규 표현식에서 부분 문자열을 일치시키고는 두 번째 정규 표현식과 같습니다. 일치하는 한자리 숫자는 '\ b \ d \ b', "\ d"는 숫자, "\ b"는 공백입니다. 외부의 괄호는 그것을 묶는 것이다. 두 번째 문자열에서 \ 1은 그룹 (앞에서 괄호를 사용 했음)이고 0은 그룹 앞에 있습니다. 나는 그것을 분명히하기를 바란다. upvoting을 고려하십시오. 감사! –

+0

죄송하지만 여전히 'r'0 \ 1''을 이해하지 못합니다. 그룹에 의해 그룹에 선행한다는 것은 무엇을 의미합니까? –