在一个python正则表达式搜索中匹配两个互斥组

2024-03-28 14:25:56 发布

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

我正在寻找一个数字,可以出现在两个不同的模式。这些模式在单个字符串中是互斥的,因为它们具有相同的含义,所以我想将结果组合成一个变量。你知道吗

abc: DIGITDIGIT-xyz

创建模式本身不是问题,但我不知道如何正确返回匹配的组(数字)。你知道吗

text = 'lorem ipsum abc: 3 lorem ipsum'

my_pattern = re.compile("(abc:\s+(\d)|(\d)-xyz)")
result = re.search(my_pattern, text)

if result:
    if result.group(2):
        return result.group(2)
    else:
        return result.group(3)

# returns 3

这个解决方案很好,但是如果有两个以上的替代方案呢?有没有比写多个条件语句更优雅的方法?你知道吗


Tags: textrereturnifmy模式group数字
2条回答

考虑使用中断语句。

通常最好的做法是避免它(通过向while表达式添加一个条件),但如果您想过早结束循环,可以使用break;

下面是一个简单的例子:

int i;

i = 0;
do {
    ++i;
    System.out.println("Before: " + i);
    if (someSpecialCondition) {
        break;
    }
    System.out.println("After: " + i);
}
while (i < 5);

假设特殊情况发生在i刚变成3时,输出为:

Before: 1
After: 1
Before: 2
After: 2
Before: 3

注意break如何终止循环。它可以用于所有类型的循环(do..whilewhile,以及两种类型的for

如果您有嵌套循环,并且需要将外部循环与内部循环分开,那么您可能应该将代码重构为子方法。但是,如果不想重构,可以使用定向的break

int i, j;

outerLoop: for (i = 0; i < 5; ++i) {
    for (j = 0; j < 5; ++j) {
        if (i == 2 && j == 2) {
            break outerLoop;
        }
    }
}

在那里,outerLoop标记外循环,break outerLoop导致内循环和外循环终止。不过,如果你开始这么做,可能是时候重构了

来自JLS的更多信息:http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.15

相关问题 更多 >