簡體   English   中英

根據匹配從字符串中獲取子字符串

[英]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.

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