【问题标题】:regular expression for matching traceroute output fails [duplicate]匹配traceroute输出的正则表达式失败[重复]
【发布时间】:2018-04-14 04:07:08
【问题描述】:

我正在尝试编写一个匹配以下任何行的正则表达式

localhost.localdomain (127.0.0.1) 0.025 毫秒 0.007 毫秒 0.006 毫秒

127.0.0.1 (127.0.0.1) 0.025 毫秒 0.007 毫秒 0.006 毫秒

我尝试了以下正则表达式

[127.0.0.1|localhost.localdomain] (127.0.0.1) [\d.]+ ms [\d.]+ ms [\d.]+ ms

但这不起作用。它只匹配

n (127.0.0.1) 0.025 毫秒 0.007 毫秒 0.006 毫秒

我能得到一些帮助吗?

谢谢 ~S

【问题讨论】:

    标签: python regex


    【解决方案1】:

    在字符类中,没有匹配字符串的概念。对于正则表达式[cat],这并不意味着它应该从字面上匹配单词cat。这意味着它应该匹配 cat

    同样的情况在这里。您正在尝试使用字符类匹配起始字符串

    [127.0.0.1|localhost.localdomain]
    

    应该用groups代替

    (?:127.0.0.1|localhost.localdomain)
    

    您还想从字面上匹配括号(),但括号在正则表达式中具有特殊含义。他们是。要从字面上匹配括号,应使用\ 对其进行转义。

    所以最终的正则表达式是

    (?:127.0.0.1|localhost.localdomain) \(127.0.0.1\) [\d.]+ ms [\d.]+ ms [\d.]+ ms
    

    (?:) 是非捕获组。它不会将结果存储在内存中。

    Regex Demo

    【讨论】:

    • 非常感谢您的帮助
    • @user2677279 如果有帮助,请接受答案
    • 在这种情况下我很奇怪,添加 ?: 是如何改变行为或处理的。如果我不使用 ?: ,re.findall 仅返回匹配的字符串( 127.0.0.1 )。如果我输入 ?: 它会返回整个字符串( 127.0.0.1 (127.0.0.1) 0.025 ms 0.007 ms 0.006 ms )。你能告诉我为什么两者不同
    • @user2677279 见this answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多