代码之家  ›  专栏  ›  技术社区  ›  chitown88

python通过一种字符模式来遍历或删除字符串的末尾

  •  8
  • chitown88  · 技术社区  · 7 年前

    我试图去掉本专栏中字符串的末尾。我已经看到了如何rstrip一个特定的字符,或字符串末尾的一组字符,但是如何基于模式进行呢?

    我想去掉 'team' 列中,我们看到小写字母后跟大写字母。然后从大写字母开始删除。我想要下面的 “团队”

       team                              pts/g
    St. Louis RamsSt. Louis             32.875
    Washington RedskinsWashington       27.6875
    Minnesota VikingsMinnesota          24.9375
    Indianapolis ColtsIndianapolis      26.4375
    Oakland RaidersOakland              24.375
    Carolina PanthersCarolina           26.3125
    Jacksonville JaguarsJacksonville    24.75
    Chicago BearsChicago                17.0
    Green Bay PackersGreen Bay          22.3125
    San Francisco 49ersSan Francisco    18.4375
    Buffalo BillsBuffalo                20.0
    

    如下所示:

       team                              pts/g
    St. Louis Rams                      32.875
    Washington Redskins                 27.6875
    Minnesota Vikings                   24.9375
    Indianapolis Colts                  26.4375
    Oakland Raiders                     24.375
    Carolina Panthers                   26.3125
    Jacksonville Jaguars                24.75
    Chicago Bears                       17.0
    Green Bay Packers                   22.3125
    San Francisco 49ers                 18.4375
    Buffalo Bills                       20.0
    
    2 回复  |  直到 6 年前
        1
  •  10
  •   Felk    2 年前

    re.sub(pattern, repl, string) 为此。

    让我们使用此正则表达式进行匹配:

    ([a-z])[A-Z].*?(  )
    

    ([a-z]) ,后跟大写字符 [A-Z] .*? 直到它碰到两个空格 ( ) 小写字符和两个空格在一个组中,因此可以使用 \1 第一次和 \2 re.sub :

    new_text = re.sub(r"([a-z])[A-Z].*?(  )", r"\1\2", text)
    

       team                              pts/g
    St. Louis Rams             32.875
    Washington Redskins       27.6875
    Minnesota Vikings          24.9375
    Indianapolis Colts      26.4375
    Oakland Raiders              24.375
    Carolina Panthers           26.3125
    Jacksonville Jaguars    24.75
    Chicago Bears                17.0
    Green Bay Packers          22.3125
    San Francisco 49ers    18.4375
    Buffalo Bills                20.0
    

    这把空间对齐搞砸了。可能与您无关,但如果您想用空格替换删除的字符,可以将函数而不是替换字符串传递给 重新。附属的 ,需要 Match 对象并返回 str :

    def replace_with_spaces(match):
        return match.group(1) + " "*len(match.group(2)) + match.group(3)
    

    然后像这样使用它(注意我是如何将要替换的部分放入正则表达式组的):

    new_text = re.sub(r"([a-z])([A-Z].*?)(  )", replace_with_spaces, text)
    

       team                              pts/g
    St. Louis Rams                      32.875
    Washington Redskins                 27.687
    Minnesota Vikings                   24.937
    Indianapolis Colts                  26.437
    Oakland Raiders                     24.375
    Carolina Panthers                   26.312
    Jacksonville Jaguars                24.75
    Chicago Bears                       17.0
    Green Bay Packers                   22.312
    San Francisco 49ers                 18.437
    Buffalo Bills                       20.0
    
        2
  •  1
  •   Captain'Flam    7 年前

    我建议,只为你的问题,删除最小的结尾,这也是一个乞讨。 下面是一个小函数及其测试:

    def smart_rstrip ( s ):
        for i in xrange( 1,len( s )):
            if s.endswith( s[:i] ):
                return s[:-i]
        return s
    
    
    s = ['St. Louis RamsSt. Louis', 'Washington RedskinsWashingt...]
    print '\n'.join( s )
    print '\n'.join( map( smart_rstrip,s ))
    

    试试看,我想你会得到你想要的。。。