正则表达式匹配可选的d

2024-10-01 02:23:52 发布

您现在位置:Python中文网/ 问答频道 /正文

给定如下结构的文件名:

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

其中snip是可选文本,可以包含额外的点 但是typeunithostname等是固定的。你知道吗

例如:

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

我想匹配以下文件名: 文本

问题是<dot><snip><dot>第二个是可选的,这取决于<snip>的存在。 在上面的例子中,snip等于BOGONS-EXT-V6-in。你知道吗

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

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

但是,我想要的是在regex中的.(点)就在router之前。因为.后面的内容真正表示路由器主机名。你知道吗

我试过,但没有成功:

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

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


Tags: text文本文件名typeunitinterfacesextsnip
2条回答

您需要改用re.matchre.search。你知道吗

如果名称部分的条件是固定的,您可以只使用字符串解析

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'

相关问题 更多 >