我正在尝试将我的网页(在 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>'"
看着蟒蛇帮助 http://docs.python.org/2/library/re.html#re.sub对于 re.sub,我尝试将 \1 更改为 \g 但这会导致无效的组引用错误。
请帮助我了解如何让它发挥作用
这里的问题是你没有任何捕获的组expr
.
无论您想在比赛的哪个部分出现\1
,您需要放入括号内。例如:
>>> expr = r'\s+([A-Z][a-z]+[A-Z][a-z]+)\s'
>>> parser=re.compile(expr)
>>> parser.sub(repl, mystr)
'this is a string to Test whether<a href="/photos/WikiLink">WikiLink</a>will work ProPerly'
反向引用\1
指匹配中的组 1,它是与第一个括号内的子表达式匹配的部分。同样地,\2
是组 2,即与第二个带括号的子表达式匹配的部分,依此类推。如果你使用\1
当你的组少于 1 个时,一些正则表达式引擎会给你一个错误,其他引擎会使用文字'\1'
字符,ctrl-A; Python 执行后者,ctrl-A 的规范表示是'\x01'
,所以这就是你这么看的原因。
第 0 组是整场比赛。但这不是您在本例中想要的,因为您不希望空格成为替换的一部分。
您需要的唯一原因g
语法是指简单的反向引用不明确。例如,如果子是123\1456
,无法判断这是否意味着123
,然后是组 1,然后是456
, or 123
接下来是组 1456,或者……
进一步阅读分组和反向引用。 http://www.regular-expressions.info/brackets.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)