如何在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中的正则表达式中获取组[重复]的主要内容,如果未能解决你的问题,请参考以下文章