Python 从单个长行中提取特定字符串

Python 从单个长行中提取特定字符串,python,text-parsing,Python,Text Parsing,我试图从包含多个ID的一条长线中提取一些网络接口的ID。 我已经尝试使用split,但没有成功。我将感谢任何帮助 这是一个输入示例,请记住这是在一行文本上 “接口Gi1/0/20 AuditSessionID 0000000 xxxxxxxxx上的身份验证成功,接口Gi1/0/24 AuditSessionID 0000000 xxxxxxxxx上的身份验证成功,接口Fi1/0/10 AuditSessionID 0000000 xxxxxxxxx上的身份验证未成功” 我只期望输出 Gi1/0/

我试图从包含多个ID的一条长线中提取一些网络接口的ID。 我已经尝试使用split,但没有成功。我将感谢任何帮助

这是一个输入示例,请记住这是在一行文本上

“接口Gi1/0/20 AuditSessionID 0000000 xxxxxxxxx上的身份验证成功,接口Gi1/0/24 AuditSessionID 0000000 xxxxxxxxx上的身份验证成功,接口Fi1/0/10 AuditSessionID 0000000 xxxxxxxxx上的身份验证未成功”

我只期望输出 Gi1/0/20 Gi1/0/24
Fi1/0/10

正则表达式适用于此任务:

重新导入
text='接口Gi1/0/20 AuditSessionID 0000000 xxxxxxxxx上的身份验证成功,接口Gi1/0/24 AuditSessionID 0000000 xxxxxxxxx上的身份验证成功,接口Fi1/0/10 AuditSessionID 0000000 xxxxxxxxx上的身份验证未成功'
关于findall('接口(.*),文本)
re.findall()
将返回一个包含所需内容的列表

['Gi1/0/20','Gi1/0/24','Fi1/0/10']

模式
'Interface(.*?)
的工作原理是匹配以单词“Interface”开头的所有内容,然后是空格,然后是某物或无,然后是另一个空格。前面提到的某物或某物由
(.*?
)表示,它捕获(即它被添加到
re.findall()
的输出中)任何与
*?
匹配的内容,即任何字符(
),任何次数(
*
),只要需要匹配(
)。您可以在这样的网站上使用正则表达式,这将允许您运行Python正则表达式,并对它们进行解释(比我做得更好)。

不完全清楚您要提取的模式是由哪些属性定义的,但这里有一个严格的正则表达式,它匹配大写字母,后跟小写字母、数字、斜杠和其他数字,然后是一个斜杠和两个数字。如果输入字符串中存在重复和其他字符,您可以轻松地将其扩展为包括重复和其他字符

import re

s = "Authentication success on Interface Gi1/0/20 AuditSessionID 0000000XXXXXXXXXX, Authentication success on Interface Gi1/0/24 AuditSessionID 0000000XXXXXXXXXX, Authentication not succeed on Interface Fi1/0/10 AuditSessionID 0000000XXXXXXXXXX"

print(re.findall(r"[A-Z][a-z]\d/\d/\d\d", s))
输出:

['Gi1/0/20','Gi1/0/24','Fi1/0/10']

提取这些模式非常简单,但要使解决方案具有足够的通用性,如果您提到定义要提取的模式的特征,这会很有帮助。是由三部分组成的上字母、下字母、数字、斜线、数字、斜线、数字、数字图案吗?该字段是否会更改为其他字段?字符串出现在“Interface”之后、“AuditSessionID”之前,这是事实吗?更多的澄清将有助于避免冒昧的回答。如果您觉得此处的答案解决了问题,请单击旁边的绿色复选标记将其标记为“已接受”。否则,请添加评论,或编辑您的问题以澄清它。