正则表达式中的“可选”反向引用

2024-10-02 08:22:42 发布

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

我有一个正则表达式,有两个组是OR'd,我想知道如果一个组匹配的话,是否有可能让一个组作为一个反向引用?在所有情况下,我都想匹配spam.eggs.com网站

示例:

import re

monitorName = re.compile(r"HQ01 : HTTP Service - [Ss][Rr][Vv]\d+\.\w+\.com:(\w+\.\w+\.(?:net|com|org))|(\w+\.\w+\.(?:net|com|org))")

test = ["HQ01 : HTTP Service - spam.eggs.com",
    "HQ01 : HTTP Service - spam.eggs.com - DISABLED",
    "HQ01 : HTTP Service - srv04.example.com:spam.eggs.com",
    "HQ01 : HTTP Service - srv04.example.com:spam.eggs.com - DISABLED"]


for t in test:
    m = monitorName.search(t)
    print m.groups()

产生:

^{pr2}$

如果我的组只返回一个匹配的组而不是两个都返回,那就太好了。在


Tags: ororgtestrecomhttpnetexample
3条回答

|运算符具有优先权,因此它适用于之前的所有所有(在本例中,从regex的开头开始)或其后的所有内容。在正则表达式中,如果没有“srv04”。example.com网站,它不检查字符串是否包含“HTTP服务”!在

你的两个捕获组是相同的,所以没有必要同时拥有它们。你只想让srv*:部分可选,对吧?在

试试这个:

r"HQ01 : HTTP Service - (?:[Ss][Rr][Vv]\d+\.\w+\.com:)?(\w+\.\w+\.(?:net|com|org))"

使用m.group(1) or m.group(2)。在

m = monitorName.search(t)
g = m.groups()
print g[0] or g[1]

相关问题 更多 >

    热门问题