【发布时间】:2018-02-11 18:04:23
【问题描述】:
我正在学习 Python 的“re”部分,而命名模式 (?P=name) 让我很困惑,
当我使用re.sub() 对数字和字符进行一些交换时,模式“(?P=name)”不起作用,但模式“\N”和“\g<name>”仍然有意义。代码如下:
[IN]print(re.sub(r'(?P<digit>\d{3})-(?P<char>\w{4})', r'(?P=char)-(?P=digit)', '123-abcd'))
[OUT] (?P=char)-(?P=digit)
[IN] print(re.sub(r'(?P<digit>\d{3})-(?P<char>\w{4})', r'\2-\1', '123-abcd'))
[OUT] abcd-123
[IN] print(re.sub(r'(?P<digit>\d{3})-(?P<char>\w{4})', r'\g<char>-\g<digit>', '123-abcd'))
[OUT] abcd-123
为什么我使用(?P=name)时无法替代?
以及如何正确使用?
我正在使用 Python 3.5
【问题讨论】:
-
(?P=name)是模式内反向引用。您不能在替换模式中使用它。 -
你想用 "?P=name" 达到什么目的???
标签: python python-3.x regex re backreference