[英]regex to match an optional dot
給定一個類似以下內容的文件名:
<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>
的存在,第二個是可選的。 在上面的示例中, 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')
您能否提供幫助並建議正則表達式的外觀,以解決上述問題?
您需要改用re.match
或re.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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.