You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在文本文件中匹配包含205与212的两类目标行?正则表达式仅匹配单一模式的问题解决

解决正则匹配同时包含205/212前缀行的问题

你的问题出在正则表达式的分组写法上——原来的([205][212])并不是匹配"205"或"212"这两个完整前缀,而是在匹配单个字符的组合,自然没法同时命中两类目标行。下面给你具体的修复方案:

修正后的正则表达式

把原来的分组部分从字符组组合改成分支匹配,就可以同时匹配以205或212开头的数字序列了:

pattern = re.compile(r"^\S+ \S+ \S+ (205|212)\d+.*$")

为什么原来的正则不行?

你写的[205][212]是两个字符组的拼接:

  • [205]表示匹配单个字符:2、0、5中的任意一个
  • [212]等价于[21](字符组里重复的字符会被自动忽略),表示匹配单个字符:2或1

所以这个组合只会匹配像222102这类两位字符,完全不是你要的"205"或"212"三个连续字符的前缀。

完整代码示例

下面是可以直接运行的Python代码,用来提取所有符合要求的行:

import re

# 修正后的正则
pattern = re.compile(r"^\S+ \S+ \S+ (205|212)\d+.*$")

# 你的文本内容
input_text = """mpls switch-l2vc 10.123.143.209 205316002 tunnel-policy TE between 10.123.130.1 205316004 tunnel-policy TE backup 10.123.130.2 205316004 tunnel-policy TE encapsulation vlan
mpls switch-l2vc 10.124.17.165 205315402 tunnel-policy TE between 10.123.130.1 205315404 tunnel-policy TE backup 10.123.130.2 205315404 tunnel-policy TE encapsulation vlan
mpls switch-l2vc 10.124.18.113 212359002 tunnel-policy TE between 10.123.130.1 205359004 tunnel-policy TE backup 10.123.130.2 205359004 tunnel-policy TE encapsulation vlan
mpls switch-l2vc 10.124.17.161 212315002 tunnel-policy TE between 10.123.130.1 205315004 tunnel-policy TE backup 10.123.130.2 205315004 tunnel-policy TE encapsulation vlan
mpls switch-l2vc 10.124.17.168 205315702 tunnel-policy TE between 10.123.130.1 205315704 tunnel-policy TE backup 10.123.130.2 205315704 tunnel-policy TE encapsulation vlan"""

# 按行遍历并匹配
target_lines = [line for line in input_text.split('\n') if pattern.match(line)]

# 输出结果
print("提取到的目标行:")
for line in target_lines:
    print(line)

拓展:匹配任意位置的205/212前缀

如果你的需求不是限定第四项是目标数字,而是只要行内任意位置出现以205或212开头的数字就提取,可以把正则简化成:

pattern = re.compile(r".*(205|212)\d+.*")

内容的提问来源于stack exchange,提问作者saratoon J.

火山引擎 最新活动