如果一个字符后面的字符串不匹配,那么如何匹配该字符串

2024-10-01 13:35:53 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有以下两个字符串

字符串-1:(完整字符串)

char = "port : id 0xa30  State INIT-DOWN (Admin Down | Port Disabled/Link status unknown)  Rate 8100  MeasuredBw 18097"

字符串-2:(其中字符串的一部分不存在。i、 e字符串' Rate 8100 MeasuredBw 18097'不存在)

char = "port : id 0xa30  State DOWN (Admin Down, Link Down, ODU Up, CCP Up)"

因此,我能够验证字符串的一部分是否存在。但是,挑战是当字符串存在时,我无法匹配字符串

我想出的正则表达式:(虽然不是最好的)

re.search("port\s+:\s+id\s+(\w+)\s+State\s+(\w+-*\w*)[\(\w\)\|\/\s\,]*(?:Rate\s+(\w+)\s+MeasuredBw\s+(\w+))?", port_state1).groups()

输出:

('0xa30', 'DOWN', None, None) for both the string.

预期产量:

String-1:  
('0xa30', 'DOWN', '8100', '18097')  
String-2:  
('0xa30', 'DOWN', None, None)

Tags: 字符串noneidstringrateadmininitport
1条回答
网友
1楼 · 发布于 2024-10-01 13:35:53

尝试以下模式

例如:

import re

char_1 = "port : id 0xa30 State INIT-DOWN (Admin Down | Port Disabled/Link status unknown) Rate 8100 MeasuredBw 18097"
char_2 = "port : id 0xa30 State DOWN (Admin Down, Link Down, ODU Up, CCP Up)"


print(re.search("port\s+:\s+id\s+(\w+)\s+State\s+(\w+-*\w*)\s+\(.*?\)\s*(?:Rate\s+(\d+)\s+MeasuredBw\s+(\d+))?", char_1).groups())
print(re.search("port\s+:\s+id\s+(\w+)\s+State\s+(\w+-*\w*)\s+\(.*?\)\s*(?:Rate\s+(\d+)\s+MeasuredBw\s+(\d+))?", char_2).groups())

输出:

('0xa30', 'INIT-DOWN', '8100', '18097')
('0xa30', 'DOWN', None, None)

相关问题 更多 >