如何在python中的正则表达式中获取组[重复]

Posted

技术标签:

【中文标题】如何在python中的正则表达式中获取组[重复]【英文标题】:How to get groups in regex in python [duplicate] 【发布时间】:2019-08-31 12:22:41 【问题描述】:

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

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 新手。

【问题讨论】:

你的预期输出是什么? re.match() 仅在字符串的开头检查匹配项。 如果要捕获所有数字,必须使用 findall 而不是 match。 【参考方案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) 访问,正则表达式中的第二次出现() 将可访问通过正则表达式(或替换字符串)中的 \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()

输出:

python test3.py
('First group : ', '1123')
('Second group : ', '45')
('Third group : ', '35')
('Third group : ', '99')

【讨论】:

非常好的答案。

以上是关于如何在python中的正则表达式中获取组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python中的正则表达式中的 ""

正则表达式 - 重复捕获组

re正则匹配模块_python

Python正则表达式-或在捕获组中间[重复]

如何在Python中的正则表达式上拆分字符串[重复]

如何使用 Python 将正则表达式应用于系列中的元素 [重复]