我正在尝试将我的网页(在django中创建)中所有WikiLink类型的字符串转换为html链接。
我正在使用以下表达式
import re
expr = r'\s+[A-Z][a-z]+[A-Z][a-z]+\s'
repl=r'<a href="/photos/\1">\1</a>'
mystr = 'this is a string to Test whether WikiLink will work ProPerly'
parser=re.compile(expr)
parser.sub(repl, mystr)
这将返回以下字符串,并用十六进制值替换该字符串。
"this is a string to Test whether<a href='/mywiki/\x01>\x01</a>'will work<a href='/mywiki/\x01>\x01</a>'"
查看re.sub的python help,我试图将\1更改为\g<;1>;,但这会导致无效的组引用错误。
请帮助我理解如何让这个工作
这里的问题是在
expr
中没有任何捕获的组。无论您想将匹配的任何部分显示为
\1
,都需要放在括号中。例如:反向引用
\1
引用匹配中的组1,该组是匹配第一个带圆括号的子表达式的部分。同样,\2
是第2组,与第二个括号中的子表达式匹配的部分,以此类推。如果在少于1个组的情况下使用\1
,一些regexp引擎会给您一个错误,其他的会使用一个文本'\1'
字符,一个ctrl-a;Python会执行后者,而ctrl-a的规范表示是'\x01'
,因此您会这样看。组0是整个匹配项。但在这种情况下,这不是您想要的,因为您不希望空格成为替换的一部分。
您需要
g
语法的唯一原因是当一个简单的反向引用不明确时。例如,如果sub是123\1456
,则无法判断它是指123
,然后是第1组,然后是456
,还是123
,然后是第1456组,或者Further reading on grouping and backreferences.
相关问题 更多 >
编程相关推荐