2015-05-22 29 views
1

我想通過使用Python的re模塊像如何規範 '1:2:3' 到'01:02:03' 通過使用Python的re模塊?

'1:2:3','10:20:30' 

規範化字符串

'01:02:03','10:20:30' 

, 所以我想選擇像 '1:2:3' 的字符串,則匹配單數「1」,「2」,「3」 ......,這是我的模式:

^\d(?=\D)|(?<=\D)\d(?=\D)|(?<=\D)\d$ 

它的工作原理,但我認爲該模式是不是很簡單,任何人都可以幫我把它簡化?或者如果它更復雜,則使用map()/ split()。

+0

因此,每個單個數字將被變成'0 '???? – vks

+0

您的模式匹配不同字符串的TON。你可能想要縮小「1:2:3」這個字符串的含義。 – Falmarri

回答

2

\b單詞字符和非字符字之間的匹配。

>>> import re 
>>> l = ['1:2:3','10:20:30'] 
>>> [re.sub(r'\b(\d)\b', r'0\1', i) for i in l] 
['01:02:03', '10:20:30'] 

DEMO

+0

所以你的意思是數字也是一個字符,而我以爲\僅b匹配字符是英文單詞,如「香蕉」 ..但無論如何,感謝ü非常馬赫! – Spike

+0

是的,'A-Z,A-Z,數字0-9,_'是字字符。 –

1
re.sub(r"(?<!\d)(\d)(?!\d)",r"0\1",test_str) 

你可以把它簡化爲this.See演示。

https://regex101.com/r/nD5jY4/4#python

如果字符串像

x="""'1:2:3','10:20:30'""" 

然後做

print ",".join([re.sub(r"(?<!\d)(\d)(?!\d)",r"0\1",i) for i in x.split(",")]) 
1

您可以用re做到這一點,但幾乎沒有人會知道它是如何工作之後。我推薦這個代替:

':'.join("%02d" % int(x) for x in original_string.split(':')) 

它更清楚它是如何工作的。

相關問題