从单个长行中提取特定字符串
Extract specific strings from a single long line
我正在尝试从包含多个 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
正则表达式适合这个任务:
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()
将 return 包含您想要的内容的列表。
['Gi1/0/20', 'Gi1/0/24', 'Fi1/0/10']
模式 'Interface (.*?) '
的工作原理是匹配以单词 "Interface" 开头的所有内容,然后是 space,然后是某物或什么都不是,然后是另一个 space。前面提到的某物或无物由 (.*?)
表示,它捕获(即它被添加到 re.findall()
的输出)与 .*?
匹配的任何字符(.
), 任意次数 (*
), 尽可能少的匹配 (?
).你可以在像 https://regex101.com/ 这样的网站上玩正则表达式,这将允许你 运行 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']
我正在尝试从包含多个 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
正则表达式适合这个任务:
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()
将 return 包含您想要的内容的列表。
['Gi1/0/20', 'Gi1/0/24', 'Fi1/0/10']
模式 'Interface (.*?) '
的工作原理是匹配以单词 "Interface" 开头的所有内容,然后是 space,然后是某物或什么都不是,然后是另一个 space。前面提到的某物或无物由 (.*?)
表示,它捕获(即它被添加到 re.findall()
的输出)与 .*?
匹配的任何字符(.
), 任意次数 (*
), 尽可能少的匹配 (?
).你可以在像 https://regex101.com/ 这样的网站上玩正则表达式,这将允许你 运行 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']