首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用regex捕获一个接一个单词,中间有换行符

如何使用regex捕获一个接一个单词,中间有换行符
EN

Stack Overflow用户
提问于 2022-02-04 01:42:25
回答 2查看 416关注 0票数 0

我一直在Python中使用regex表达式,以便在单词出现一次之后对某个序列进行匹配。我遇到了两个问题: 1)我试图搜索的文本在我想要用作触发词的单词和我想要匹配的单词之间有不同数量的字符;2)文本是多行的。

在下面的示例文本中,我希望匹配“滞后-10:10”和“滞后-10:20”,但不匹配“滞后-10:30”:

代码语言:javascript
复制
    vprn 5001 name "5001" customer 1 create
        interface "to-VPLS-6663000" create
            sap lag-10:10 create
        interface "to-VPLS-3000500" create
            sap lag-10:20 create
        vpls 3410001 name "XYZBDVLAN1" customer 1 create
            sap lag-10:30 create

我正在寻找的结果是“滞后-10:10”,“滞后-10:20”。我也不能仅仅在这些术语上进行匹配,因为任何数字都被期望在“滞后-”之后,而且我只想捕捉这个组,如果它是在“接口”一词之后(在上面的例子中,不是在单词"vpls“之后,就像在滞后性-10:30)。

使用我正在使用的网络设备,“接口”和“延迟”之间的文本可能会有所不同。我最初想出的方法是只匹配序列lag-10:[^ ]*一次,并且只在“接口”一词出现之后匹配。问题是..。我不知道该怎么做。我尝试过的每一件事都捕获了太多或不够的文本,并且由于“延迟”与“界面”不同的事实而变得复杂。

任何帮助都将不胜感激,因为我在Regex是非常新的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-04 01:47:40

下面是在多行模式下使用re.findall的一种方法:

代码语言:javascript
复制
inp = """    vprn 5001 name "5001" customer 1 create
    interface "to-VPLS-6663000" create
        sap lag-10:10 create
    interface "to-VPLS-3000500" create
        sap lag-10:20 create
    vpls 3410001 name "XYZBDVLAN1" customer 1 create
        sap lag-10:30 create"""

matches = re.findall(r'^\s+\binterface.*?\n\s+sap (lag-\d{1,2}:\d{2})', inp, flags=re.M)
print(matches)  # ['lag-10:10', 'lag-10:20']

上面使用的regex模式匹配以interface作为第一个单词的一行,后面是一个包含sap-和一个小时:分钟时间戳的行。

票数 1
EN

Stack Overflow用户

发布于 2022-02-04 02:04:25

这里有几种不同的解决方案,只要这些值总是按照您指定的那样工作:

代码语言:javascript
复制
import re
text = """    vprn 5001 name "5001" customer 1 create
        interface "to-VPLS-6663000" create
            sap lag-10:10 create
        interface "to-VPLS-3000500" create
            sap lag-10:20 create
        vpls 3410001 name "XYZBDVLAN1" customer 1 create
            sap lag-10:30 create"""

pattern = r'lag-\d{2}:[1-2]0'
result = re.findall(pattern,text,re.MULTILINE)
print(result)


pattern = r'lag-\d{2}:[1-2]\d{1}'
result = re.findall(pattern,text,re.MULTILINE)
print(result)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70980538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档