2016-12-27 54 views
1

蟒蛇捕獲組,我需要利用在字符串中使用正則表達式的每一個字的第一個字母:與應用re.sub

>>> import re 
>>> re.sub(r"\b(\S)", (r"\1").upper(), "foo bar") 
'foo bar' 

我希望得到的結果是「富酒吧」來代替。

我已經試過標題方法和string.capwords,但如下圖所示都有問題:

>>> import string 
>>> string.capwords("foo  bar 1a ") 
'Foo Bar 1a' 
>>> "1a".title() 
1A 

使用lambda表達式作爲@Sebastian的意見提出以下爲我工作。

+1

是否有必要使用正則表達式?你能用「foo bar」.title()嗎? –

+0

[如何將字符串中每個單詞的首字母(Python)大寫?](http://stackoverflow.com/questions/1549641/how-to-capitalize-the-first-letter-of-each -word-in-a-string-python) – wildwilhelm

+0

我試過了,但是當第一個字符是數字時,標題似乎不能正確工作。例如,我希望「1a」保持不變,但是「1a」.title()返回「1A」 – Anand

回答

1

如果你正在尋找一個正則表達式的解決方案,re.sub功能可以接收作爲第二個參數的函數:

>>> def t(x):       
... if x:       
...  return x.group(0).upper() 

>>> re.sub(r"\b(\S)", t, "foo bar") 
'Foo Bar'      

>>> re.sub(r"\b(\S)", t, "1foo bar") 
'1foo Bar'      
1

這似乎太工作:

import string 
' '.join([string.capitalize(word) for word in 'foo  bar 1a '.split(' ')]) 

輸出:

'Foo  Bar 1a '