2017-09-20 78 views
2

給定一個像'0104002'這樣的數字發短信的字符串,我需要返回014002python函數返回第一個非零帶中間零並返回數字串的最後一部分

基本上,當數字大於0時,返回數字文本字符串的第一部分。然後,第二部分返回以下一個非零數字開始的部分,直到字符串結束。數字展示位置爲每個輸入不同,串不會是同樣的長度

我只能夠得到什麼,我需要到目前爲止

def lot(num): 
    lot="" 
    for x in num: 
     lot+=x 
     y=int(x) 
     if y>0: break 
    print lot 

lot('0104002') 
+0

第一部分總是會變成2位數字嗎? –

+0

沒有它的總是會改變 – ziggy

回答

5

這看起來似乎是微不足道的第一部分一個正則表達式:

>>> import re 
>>> re.match(r'^(0*[^0]+)0+([^0].*)$', '0104002').groups() 
('01', '4002') 

這個正則表達式定義了兩個被一個或多個零分割的組。分割由第一系列零定義,以在第一系列非零之後出現。在此分裂之前發生的事情屬於第一組,而後來又屬於第二組。

對於任何發現正則表達式威脅的人來說,這裏是「詳細」的解釋性版本。

re.match(
    r'''^ 
     (  # Begin first group 
      0*  # Allow for some number of leading zeroes 
      [^0]+ # Match a series of non-zeroes 
     )  # End first group 
     0+  # Match some series of zeroes (the separator) 
     (  # Begin second group 
      [^0] # Match the first non-zero character 
      .*  # Match anything afterward 
     )  # End second group 
     $ 
    ''', 
    '0104002', 
    flags=re.VERBOSE).groups() 
+0

簡單在其最好的工作 – ziggy

0
def lot(num): 
    lot="" 
    parts = [] 
    for x in num: 
     lot+=x 
     y=int(x) 
     if y>0: 
     print lot, num[len(lot):] 
     parts.append(lot) 
     parts.append(num[len(lot):]) 
     break 
    print parts 

lot('0104002') 
0

這可能對你有幫助:

def lot(num): 
    lot="" 
    z=0 
    for x in num: 
     lot+=x 
     y=int(x) 
     if y>0: 
      z=num.index(x) 
      break 
    print (lot) 
    print (num[z+1:].strip("0")) 

lot('0104002') 
1

雖然正則表達式是可能做到這一點的最好辦法,如果你不能不管什麼原因,你可以索引你的字符串只要你找到號碼就切片。

def lot(num): 
    for i in range(len(num)): 
     if(num[i] != "0"): #if you encounter a character that isn't 0 
      print(num[:i+1], int(num[i+1:]))  
      return num[:i+1], str(int(num[i+1:])) #return the two halves 

lot('0104002') 

我既包括印刷和回報,因爲你問回他們,但你在你的代碼只打印了他們。

+0

ahh我喜歡這個想法,但在你的函數返回的第二個數字保持領先的零 – ziggy

+0

我用這個來取代前導零 – ziggy

+1

print(num [:i +1],str(int(num [i + 1:]))) – ziggy