我的字符串如下
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”子字符串之后,它具有任何特殊字符,例如“:”或“ =”。我们必须检索该特殊字符之后的值。
答案 0 :(得分:0)
您可以使用正则表达式的内置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')
>>>
答案 1 :(得分:-1)
您可以使用以下模式和函数来获取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)
在regex
中找到string1
,并提取出第一组group(1)
。如果有两个匹配项,并且要提取第二个组,则可以将其更改为group(2)
。
print(string1_id)
print(string2_id)
print(string3_id)
输出:
admin-up
admin-up
admin-down