Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python title()认为撇号是一个新单词的开始。为什么?_Python_String_Title - Fatal编程技术网

Python title()认为撇号是一个新单词的开始。为什么?

Python title()认为撇号是一个新单词的开始。为什么?,python,string,title,Python,String,Title,这肯定是错误的。为什么撇号会被认为是一个新词的开头。这是一个问题还是我认为标题的概念有问题?因为实现通过查看前一个字符来工作,如果是字母数字,则将当前字符小写,否则将大写。也就是说,它相对简单,下面是它的纯python版本: >>> myStr="madam. i'm adam! i also tried c,o,m,m,a" >>> myStr.title() "Madam. I'M Adam! I Also Tried C,O,M,M,A" 您可以使用:

这肯定是错误的。为什么撇号会被认为是一个新词的开头。这是一个问题还是我认为标题的概念有问题?

因为实现通过查看前一个字符来工作,如果是字母数字,则将当前字符小写,否则将大写。也就是说,它相对简单,下面是它的纯python版本:

>>> myStr="madam. i'm adam! i also tried c,o,m,m,a"
>>> myStr.title()
"Madam. I'M Adam! I Also Tried C,O,M,M,A"
您可以使用:

string.capwords()


而且,由于
title()
依赖于区域设置,请检查您的区域设置以确定这是否是有意的:

locale.localeconv()

将本地约定的数据库作为 字典

title()

返回字符串的基于标题的版本:单词以开头 大写字符,其余所有大小写字符均为小写。对于8位字符串,此方法依赖于区域设置

title方法将字符串中每个单词的第一个字母大写(并将其余字母小写)。单词被标识为字母字符的子字符串,这些子字符串由非字母字符(如数字或空格)分隔。这可能会导致一些意外的行为。例如,字符串“x1x”将转换为“x1x”,而不是“x1x”

基本上,按预期工作。由于撇号实际上是非字母的,因此您会得到上面概述的“意外行为”

谷歌搜索显示,其他人认为这并不完全是最好的,并且已经编写了替代实现。请参阅:

这里的问题是,“标题格”是一个非常依赖文化的概念。即使在英语中,角落里的箱子也太多了,无法容纳所有的箱子。(另见)


如果你想要更好的东西,你需要考虑你想要处理什么类型的文本(这意味着你不正确地处理其他文本),然后编写你自己的函数。

我不知道为什么这个方法甚至出现在标准库中。它太“蠢”了,没有实际用途,所以它只会使API膨胀。+1。同意。我只想知道还有多少其他这样无用的方法存在于更多的模块中。(耸耸肩)
def title(string):
    result = []
    prev_letter = ' '

    for ch in string:
        if not prev_letter.isalpha():
            result.append(ch.upper())
        else:
            result.append(ch.lower())

        prev_letter = ch

    return "".join(result)
# Capitalize the words in a string, e.g. " aBc  dEf " -> "Abc Def".
def capwords(s, sep=None):
    """capwords(s, [sep]) -> string

    Split the argument into words using split, capitalize each
    word using capitalize, and join the capitalized words using
    join. Note that this replaces runs of whitespace characters by
    a single space.

    """
    return (sep or ' ').join(x.capitalize() for x in s.split(sep))