Python:除了以数字开头的字符串外,是否有一行脚本来命名大小写字符串?



title()方法工作得很好,但是我有一种情况,即字符串以单词和数字开头,我只想对字符串中不以数字开头的单词进行标题大写。

数字的数量可以是可变的,并且并不总是数字。以下是每种情况的示例。

"this is sparta".title() # This Is Sparta
"3rd sparta this is".title() # 3Rd Sparta This Is
"4545numbers start here".title() # "4545Numbers Start Here

我希望这些都改为:

"This Is Sparta"
"3rd Sparta This Is"
"4545numbers Start Here"

我正在使用一个不允许导入的程序,我需要在一行中完成此操作。我唯一能使用的库是re

如果可能的话,我更倾向于使用列表推导式。

事实证明,已经有一个函数可以做到这一点,string.capwords:

>>> import string
>>> string.capwords('1st foo bar bor1ng baz')
'1st Foo Bar Bor1ng Baz'
>>> string.capwords("3rd sparta this is")
'3rd Sparta This Is'

需要注意的一点是:连续的空白将被折叠成一个空格,并且前导和尾随的空白将被删除。值得注意的是,这意味着您将丢失行分隔符。如果您希望保留这些内容,则应先将其分成几行。

注意,在内部,它实际上使用capitalize方法而不是title,但这似乎是您想要的。

下面是一个简单的列表推导式:

' '.join([word.capitalize() for word in your_string.split(' ')])

如果你想分割标点和其他空格,你可能必须使用某种re函数

正则表达式解。

In [19]: re.sub(r'b(w+)b', lambda x: x.groups()[0].capitalize(), "3rd sparta this.is1", re.UNICODE)
Out[19]: '3rd Sparta This.Is1'

(参见re.sub的文档)

这可以是另一个选项:

  s = "3rd sparta this is"
  " ".join([si.title() if not (str.isdigit(si[0])) else si for si in s.split()])

只需将第一个字符设置为大写

string = string.split (' ')
for x in range (len(string)):
    try:
        string[x] = string[x][0].uppercase() + string [x][1:]
    except ValueError:
        pass
temp = ''
for word in string:
    temp += word + ' '
string = temp
string.title()

最新更新