好的,通常我不会问这些问题。
使用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?
答案 0 :(得分:3)
替换字符串中的\1
和\2
指的是第一个和第二个&#34;捕获&#34;。捕获是模式正则表达式的一部分,括在括号中。
例如,以下是示例正则表达式中的捕获:
r'\* \[(.*)\]\(#(.*)\)'
^^^^ ^^^^
所以\1
指的是第一次捕获匹配的任何内容,\2
指的是第二次捕获匹配的内容。