我想在表达式中打印第一,第二和第三匹配组。这是详细信息。
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的新手。
答案 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()