![](/img/trans.png)
[英]Obtaining substring from string based on substring matching and string index
[英]Get Substring from the String based on the matching
我有如下字符串
srring1 = "1/1/0/A1,A2:admin-status=up,id=admin-up"
string2 = "1/1/0/A1,A2:id:admin-up,admin-status=up"
string2 = "1/1/0/A1,A2:id=admin-down:admin-status=up"
我的輸出如下:
print(string1) = admin-up
print(string2) = admin-up
print(string3) = admin-down
在字符串中,我的關鍵字是“id”,通過使用這個子字符串,我們必須檢索該子字符串的值,即“admin-up”。 在“id”子字符串之后,它有任何特殊字符,如“:”或“=”。 我們必須檢索該特殊字符之后的值。
您可以使用正則表達式的內置 re 庫執行此操作:
>>> import re
>>> strings = [
... '1/1/0/A1,A2:admin-status=up,id=admin-up',
... '1/1/0/A1,A2:id:admin-up,admin-status=up',
... '1/1/0/A1,A2:id=admin-down:admin-status=up'
... ]
>>> [re.search('id[:=]([^,:]+)',id).groups(0)[0] for id in strings if re.search('id[=:].+', id)]
['admin-up', 'admin-up', 'admin-down']
這將包括沒有連字符的 ID。 正則表達式分解如下:
id
手段“的外觀為文字串ID” [:=]
意思是“后跟隨一個=
或:
(
捕獲跟隨在捕獲組的東西[^,:]+
捕獲盡可能多的字符不在,
或:
盡可能)
關閉捕獲組。
正則表達式的更簡單版本用於過濾掉根本不匹配的字符串。 函數形式:
>>> def get_id(log):
... match = re.search('id[:=]([^,:]+)',log)
... if not match:
... return None
... return match.groups(0)[0]
...
>>> get_id('1/1/0/A1,A2:admin-status=up,id=admin-up')
'admin-up'
>>> get_id('1/1/0/A1,A2:id:admin-up,admin-status=up')
'admin-up'
>>> get_id('1/1/0/A1,A2:id=admin-down:admin-status=up')
'admin-down'
>>> get_id('no id found here')
>>>
您可以使用以下模式和函數來獲取group
import re
string1 = "1/1/0/A1,A2:admin-status=up,id=admin-up"
string2 = "1/1/0/A1,A2:id:admin-up,admin-status=up"
string3 = "1/1/0/A1,A2:id=admin-down:admin-status=up"
regex = r'id[:=](\w+-\w+)'
string1_id = re.search(regex, string1).group(1)
string2_id = re.search(regex, string2).group(1)
string3_id = re.search(regex, string3).group(1)
編輯讓我解釋一下這個解決方案。 OP 想要在關鍵字id
之后提取一個短語/單詞,后跟:
或=
。 選擇的正則表達式是r'id[:=](\\w+-\\w+)'
,它本質上是在主字符串中找到一個子字符串,其中包含單詞id
后跟任一字符[:=]
並提取后面的單詞(\\w+-\\w+)
。 這里的括號表示一個group
,這是這里感興趣的。 \\w+
指定字母數字字符(至少 1 個字符)后跟一個破折號-
以及后面的另一個單詞。
這部分re.search(regex, string1).group(1)
在string1
查找regex
並提取第一組group(1)
。 如果有兩個匹配項並且您想提取第二個組,則可以將其更改為group(2)
。
print(string1_id)
print(string2_id)
print(string3_id)
輸出:
admin-up
admin-up
admin-down
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.