根据匹配条件从字符串中获取子字符串

时间:2019-01-26 05:11:01

标签: python python-2.7

我的字符串如下

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”子字符串之后,它具有任何特殊字符,例如“:”或“ =”。我们必须检索该特殊字符之后的值。

2 个答案:

答案 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