簡體   English   中英

正則表達式以匹配可選點

[英]regex to match an optional dot

給定一個類似以下內容的文件名:

<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')

您能否提供幫助並建議正則表達式的外觀,以解決上述問題?

您需要改用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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM