我确实有一些要使用python regex排序的vim函数名。
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()']
您可以通过捕获括号(\w+)\(\)
之前的单词char来简化正则表达式来对此列表进行排序>
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()']
输出和输入是相同的,只是顺序不同。