正则表达式以匹配可选的点

时间:2018-10-01 13:12:43

标签: python python-3.x glob

给出的文件名结构如下:

<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来获取文件名:(此“有效”)

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

但是,我想在.之前的正则表达式中包含router(点)。 .之后的内容真正表示路由器主机名。

我尝试了这个,但是失败了:

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

您能否提供帮助并建议正则表达式的外观以解决上述问题?

2 个答案:

答案 0 :(得分:0)

您需要改用re.matchre.search

答案 1 :(得分:0)

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

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'