String can';在处理上套管柱时,不能正确处理

String can';在处理上套管柱时,不能正确处理,string,python-2.7,String,Python 2.7,我想得到你的什么意思,而我得到的是你的意思。我已经添加了行new\u line=new\u word+'。我的问题在哪里?首先,每次迭代都要覆盖新行。其次,new\u word越来越长,因为你从来没有“清除”过它。第三,在整个新行的末尾添加空格,而不是在每个新词后面添加空格(因为第二个) 见评论 您的代码没有重置new\u word的值,并且您在循环中重写了new\u行,这是正确的,但我想与正则表达式共享一个相邻的线性解决方案: def to_weird_case(string): li

我想得到你的
什么意思
,而我得到的是
你的意思
。我已经添加了行
new\u line=new\u word+'
。我的问题在哪里?

首先,每次迭代都要覆盖
新行。其次,
new\u word
越来越长,因为你从来没有“清除”过它。第三,在整个
新行的末尾添加空格
,而不是在每个新词后面添加空格(因为第二个)

见评论


您的代码没有重置
new\u word
的值,并且您在循环中重写了
new\u行
,这是正确的,但我想与正则表达式共享一个相邻的线性解决方案:

def to_weird_case(string):
    lines = string.split()
    new_line = ''
    for word in lines:
        new_word = '' # start new word from an empty string
        for item in word:
            if word.index(item) %2 ==0:
                item = item.upper()
                new_word += item
            else:
                new_word += item
        print new_word
        new_line = new_line + new_word + " " # add new word to the existing new line 
    return new_line

(\S)(\S?)
正则表达式将一个非空白捕获到组1中,将一个或零个非空白捕获到组2中,然后在
re.sub
中,将组1值替换为大写的对应值

看看如何匹配您的
您的意思是什么

  • wh
    w
    在第1组匹配,
    h
    在第2组()。匹配项作为
    m
    传递给lambda表达式,修改组1,组2按原样传递
  • 下一个匹配包含在
处的
,组也会发生同样的情况
  • 接下来,空格不匹配,因为
    \S
    匹配除空格以外的任何字符
  • do
    匹配后,会发生与上述相同的情况
  • 空间,
    yo
    按上述方式进行匹配和处理
  • u
    +由于第二个
    \S
    有一个
    量词,该量词与它修改的模式的一个或零个匹配,因此接下来将匹配空白。因此,第一个字符是大写的,第二个空字符串按原样使用
  • 然后以类似的方式处理其余部分

  • 是的,要简单得多。我还有很长的路要走,它成功了!我一定不知道该把
    新行放在哪里。但是如果我想把最后一个空格删掉怎么办。它将打印类似于
    “WhAt dom YoU means”
    ,在句子末尾有一个额外的空格。您可以删除“return”之前的最后一个空格。这不是一个很好的解决方案:)不过还有另一个问题。当我测试
    这是一个测试时,我发现“test”中有两个“t”。因此,
    index
    会将最后一个“t”的索引查找为
    0
    ,并将其大写。请使用“range(0,len(word),2)”(第2步)每隔一秒尝试使用ti大写字母。
    def to_weird_case(string):
        lines = string.split()
        new_line = ''
        for word in lines:
            new_word = '' # start new word from an empty string
            for item in word:
                if word.index(item) %2 ==0:
                    item = item.upper()
                    new_word += item
                else:
                    new_word += item
            print new_word
            new_line = new_line + new_word + " " # add new word to the existing new line 
        return new_line
    
    import re
    def to_weird_case(string):
        return re.sub(r'(\S)(\S?)', lambda m: "{0}{1}".format(m.group(1).upper(), m.group(2)), string);
    print to_weird_case('what do you mean')