【发布时间】:2016-05-13 14:11:29
【问题描述】:
好的,我通常不会问这类问题。
使用 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指的是匹配正则表达式中第一对括号(即第一个(.*))的任何内容。 -
\1,\2是要替换的模式中的第一个和第二个匹配组。组是括号中的模式部分。 -
\(GroupReference)用于引用匹配文本中的组。如果您不知道什么是组,我建议您研究一下。在这种情况下,\1和\2是对第 1 组和第 2 组的引用,换句话说,分别是第一对和第二对()括号内的内容。