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

如何在正后面使用条件括号?

  •  -1
  • Reman  · 技术社区  · 5 年前

    我确实有一系列vim函数名,我想使用python regex对它们进行排序。

    names = [' function! s:Test2()',  '  function! Test()', ' function! s:WhateverName()', '   function! Test3()']
    

    :s

    为什么这个正则表达式不工作?

    import regex
    sorted(names, key=lambda x: regex.findall("(?<=\s*function!\s*(s:)?).*(?=\()", x, regex.IGNORECASE))
    

    输出:

    [' function! s:WhateverName()', ' function! s:Test2()', '  function! Test()', '   function! Test3()']
    

    预期产量:

    ['  function! Test()', ' function! s:Test2()', '   function! Test3()', ' function! s:WhateverName()']
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   Chris Doyle    5 年前

    (\w+)\(\)

    names = ['  function! Test()', ' function! s:Test2()', '   function! Test3()', ' function! s:WhateverName()']
    import re as regex
    names = sorted(names, key=lambda x: regex.findall("(\w+)\(\)", x, regex.IGNORECASE))
    print(names)
    

    输出

    ['  function! Test()', ' function! s:Test2()', '   function! Test3()', ' function! s:WhateverName()']
    
        2
  •  1
  •   alexisdevarennes    5 年前

    输出和输入是一样的,只是顺序不同。

    您可以使用regex命令它:

    import re
    
    pattern = re.compile(r"(\w+)\(\)") 
    
    names = ['  function! Test()', ' function! s:Test2()', '   function! Test3()', ' function! s:WhateverName()']
    names = sorted(names, key=lambda k: pattern.findall(k, flags=re.IGNORECASE))
    print(names)