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

正则表达式匹配可选点

  •  0
  • nskalis  · 技术社区  · 6 年前

    给定如下结构的文件名:

    <type>.<unit>.<snip>.<hostname>.<number>.text
    

    snip 可选文本,可能包含额外的点 type , unit hostname 等是固定的。

    例如:

    interfaces.InterfacesIxLacp.router.001.text
    policies.RoutingPoliciesIx.BOGONS-EXT-V6-in.router.002.text
    

    我想匹配以下文件名:

    问题是 <dot><snip><dot> <snip> 在上面的例子中 剪断 等于 BOGONS-EXT-V6-in

    什么是可以同时考虑这两种情况的通用正则表达式? 我正在使用 glob 从Python标准库获取文件名:(this“works”)

    glob.glob('policies.RoutingPoliciesIx.*router.*.text')
    glob.glob('interfaces.InterfacesIxLacp.*router.*.text')
    

    但是,我想要的是 . router . 就像在 . 表示路由器主机名。

    glob.glob('policies.RoutingPoliciesIx.*(\.)?router.*.text')
    

    为了解决上述问题,您能帮助并建议正则表达式应该是什么样子吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   korakot    6 年前

    re.match re.search 相反。

        2
  •  0
  •   deadvoid    6 年前

    filename1 = 'policies.RoutingPoliciesIx.BOGONS-EXT-V6-in.router.002.text'
    filename2 = 'interfaces.InterfacesIxLacp.router.001.text'
    
    first1 = filename.split('.')[:2]
    last1 = filename.rsplit('.', maxsplit=3)[1:]
    
    first2 = filename2.split('.')[:2]
    last2 = filename2.rsplit('.', maxsplit=3)[1:]
    
    >>>> first1
    ['policies', 'RoutingPoliciesIx']
    >>>> last1
    ['router', '002', 'text']
    >>>> filename1 = '.'.join(first) + '.'.join(last)
    >>>> filename1
    'policies.RoutingPoliciesIxrouter.router.002.text'
    
    >>>> filename2 = '.'.join(first) + '.'.join(last)
    >>>> filename2
    'interfaces.InterfacesIxLacprouter.router.001.text'