Python:正则表达式替换

时间:2016-05-13 14:11:30

标签: python regex

好的,通常我不会问这些问题。

使用re.sub查找和替换普通字符串很简单,但替换部分(而不是匹配部分)中的正则表达式如何工作?

特别是,在提到要解释这一点的Brian Okken's web-page时,提供代码来复制他在Pearl中使用的相同功能,但是却在python中努力开发。

import fileinput
import re

for line in fileinput.input():
    line = re.sub(r'\* \[(.*)\]\(#(.*)\)', r'<h2 id="\2">\1</h2>', line.rstrip())
    print(line)

此子目的是匹配

* [the label](#the_anchor)

并将其替换为

<h2 id="the_anchor">the label</h2>

它有效:但脚本如何准确知道标签和锚是什么?据推测\ 1和\ 2是为了匹配所需的文本,但脚本如何知道这一点,而不是认为前导*指的是\ 1?

1 个答案:

答案 0 :(得分:3)

替换字符串中的\1\2指的是第一个和第二个&#34;捕获&#34;。捕获是模式正则表达式的一部分,括在括号中。

例如,以下是示例正则表达式中的捕获:

r'\* \[(.*)\]\(#(.*)\)'
       ^^^^     ^^^^

所以\1指的是第一次捕获匹配的任何内容,\2指的是第二次捕获匹配的内容。