如何在python中的正则表达式中获取组

时间:2019-04-10 06:15:01

标签: python regex

我想在表达式中打印第一,第二和第三匹配组。这是详细信息。

Regex Pattern = "(\d+)"
Expression = "1123-xxx-abcd-45-tsvt-35-pwrst-99-xql"

我使用了Pythex,https://pythex.org/?regex=(%5Cd%2B)&test_string=1123-xxx-abcd-45-tsvt-35-pwrst-99-xql&ignorecase=0&multiline=0&dotall=0&verbose=0 可以完美找到它,并显示所有捕获的组。

但是它在python代码中不起作用。我在python代码下面提供了代码,我找不到问题。

import re


class Test3:

    def printAllGroups(self):
        regexPattern = r"(\d+)"
        text = "1123-xxx-abcd-45-tsvt-35-pwrst-99-xql"
        matcher = re.compile(regexPattern, flags=re.IGNORECASE)
        matchValue = matcher.match(text);
        if matchValue:
            print("First group : ", matchValue.group(1))
            print("Second group : ", matchValue.group(2))
            print("Third group : ", matchValue.group(2))


if __name__ == '__main__':
    test3 = Test3()
    test3.printAllGroups()

请帮助我解决这个问题,我是Python的新手。

1 个答案:

答案 0 :(得分:1)

代码

import re

regexPattern = r"(\d+)"
expression = "1123-xxx-abcd-45-tsvt-35-pwrst-99-xql"
print(re.findall(regexPattern,expression))

输出

['1123', '45', '35', '99']

在您当前的代码中,您将看到错误:

    print("Second group : ", matchValue.group(2))
IndexError: no such group

因为正则表达式中只有一个组

通过以下方式更改代码,并在下面解释正则表达式 https://regex101.com/r/BjTrgU/2,您将有一个匹配项(整行)和四个组,可以分别访问以提取数字。

区分匹配项(当您的正则表达式匹配/验证输入字符串时)与值存储在正则表达式组中的值之间的区别非常重要,每个值都由括号()定义

可以通过正则表达式(或替换字符串)中的向后引用()或正则表达式外部的\1访问正则表达式中的group(1)的第一次出现,{{1 }}可以通过正则表达式(或替换字符串)中的backerefence ()或正则表达式之外的\2进行访问,...

group(2)

输出:

import re

class Test3:

    def printAllGroups(self):
        regexPattern = r"^(\d+)[^\d]+(\d+)[^\d]+(\d+)[^\d]+(\d+)[^\d]+$"
        text = "1123-xxx-abcd-45-tsvt-35-pwrst-99-xql"
        matcher = re.compile(regexPattern, flags=re.IGNORECASE)
        matchValue = matcher.match(text);
        if matchValue:
            print("First group : ", matchValue.group(1))
            print("Second group : ", matchValue.group(2))
            print("Third group : ", matchValue.group(3))
            print("Third group : ", matchValue.group(4))

if __name__ == '__main__':
    test3 = Test3()
    test3.printAllGroups()