python正则表达式组是如何工作的

python正则表达式组是如何工作的,python,re,Python,Re,这是我的代码,输出是{'hour':'10','minute':'43},它工作正常 然后我更改代码 import re string = "现在是北京时间10点43分" pattern = re.compile(r'\D*(?P<hour>\d{1,2})\D*(?P<minute>\d{1,2})\D*') result = pattern.match(string) print(result.groupdict()) r'^\D+?p\D{1

这是我的代码,输出是{'hour':'10','minute':'43},它工作正常

然后我更改代码

import re

string = "现在是北京时间10点43分"
pattern = re.compile(r'\D*(?P<hour>\d{1,2})\D*(?P<minute>\d{1,2})\D*')
result = pattern.match(string)
print(result.groupdict())
r'^\D+?p\D{1,2}\D+?p=hour\D+$”符合语法要求,但它不起作用,结果是“无”,为什么?

?p=hour表示它希望匹配命名组hour实际匹配/捕获的内容,而不是命名组匹配的模式。所以你的替代模式会匹配现在是北京时间10点10分, 其中捕获的组为10,之后重复,但不重复现在是北京时间10点43分 稍后将看到您捕获10和43的位置

import re

string = "现在是北京时间10点43分"
# pattern = re.compile(r'\D*(?P<hour>\d{1,2})\D*(?P<minute>\d{1,2})\D*')
pattern = re.compile(r'^\D+(?P<hour>\d{1,2})\D+(?P=hour)\D+$')
result = pattern.match(string)
print(result.groupdict())