繁体   English   中英

带有re.sub的python捕获组

[英]python capture group with re.sub

我需要使用正则表达式将字符串中每个单词的首字母大写:

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

我希望结果是“ Foo Bar”。

我已经尝试了title方法和string.capwords,但是它们都有如下所示的问题:

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

在下面的评论中使用@Sebastian建议的lambda表达式对我有用。

如果您正在寻找正则表达式解决方案,则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'                      

这似乎也可行:

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

输出:

'Foo      Bar   1a   '

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM