【问题标题】:Extract specific strings from a single long line从单个长行中提取特定字符串
【发布时间】:2019-06-14 14:48:40
【问题描述】:

我正在尝试从包含多个 ID 的单个长行中从某些网络接口中提取 ID。 我已经尝试使用 split 没有成功。我将不胜感激任何帮助

这是输入的示例,请记住这是在单行文本中。

"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"

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

【问题讨论】:

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

标签: python text-parsing


【解决方案1】:

正则表达式适合此任务:

import re

text = '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'
re.findall('Interface (.*?) ', text)

re.findall() 将返回一个包含您想要的内容的列表。

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

'Interface (.*?) ' 模式的工作原理是匹配以“Interface”开头的所有内容,后跟一个空格,然后是某事或无,然后是另一个空格。 (.*?) 表示上述有或无,它捕获(即,它被添加到re.findall() 的输出中)与.*? 匹配的任何内容,这是任何字符(.),任意次数( *),尽可能少地匹配 (?)。您可以在https://regex101.com/ 等网站上使用正则表达式,这将允许您运行 Python 正则表达式并解释它们(比我能做的更好)。

【讨论】:

    【解决方案2】:

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

    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']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多