首页 > 解决方案 > 使用带有变量的 re.findall 从字符串中提取精确的短语数学

问题描述

真的很抱歉这个愚蠢的问题,我不是程序员,只是网络管理员。您能否用正确的 re.findall 表达式帮助我执行以下操作:我必须从文本字符串中提取一个确切的短语。

匹配短语:“host 192.168.72.2”(空格很重要)

示例文本:

access-list inside extended permit tcp object-group DM_INLINE_NETWORK_555 host 192.168.72.2 object-group DM_INLINE_TCP_35 

作为输入 re.findall 得到一个变量。如果我尝试解析一些简单的东西,例如:

object network H_Lin_US01
 host 192.168.72.2

这对我来说很好:

    kon = []
    kon.append("host "+IP_to_search)
    kon2 = "host "+IP_to_search
    for counter, entry in enumerate(logfile):
        entry=entry[1:] #this cuts whitespace before "host" word
        match = re.findall("%s\s*$" % kon2, entry)
            if match == kon:

它最终返回带有空格的“host xxxx”。

我现在需要返回几乎相同的内容,但前面有任何前置文本 + 一个空格,例如“host 1.1.1.1”。似乎我在这里尝试了所有可能的选项,但它仍然无法按预期工作。非常感谢提前!

标签: pythonregex

解决方案


如果你想要空格,你可以尝试这个模式来搜索:\s{1}host\s\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s{1}如果你只想匹配一个特定的 IP 地址,而不是任何 IP 地址,你只需\d{3}\.用那个 IP 地址替换链,例如:\s{1}host\s{1}123.123.123.123\s{1}.

\s{1}将仅找到 1 个空格,\d{1,3}将找到任何 1-3 个数字组合,并且\.是用于查找分隔数字组的点的转义字符。

编辑:以上不是一个好的答案。OP 在下面的评论中发布,该评论"if re.search(fr"\bhost\s*{re.escape(IP_to_search)}\b",entry):有效。请不要将我的答案标记为正确,只是提请注意 OP 的解决方案。


推荐阅读