Gur*_*dan 5 python regex django
我试图将我的网页(在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)
Run Code Online (Sandbox Code Playgroud)
这将返回以下字符串,替换为字符串的十六进制值.
"this is a string to Test whether<a href='/mywiki/\x01>\x01</a>'will work<a href='/mywiki/\x01>\x01</a>'"
Run Code Online (Sandbox Code Playgroud)
查看re.sub 的python帮助,我尝试将\ 1更改为\ g <1>,但这会导致无效的组引用错误.
请帮助我了解如何使这项工作
aba*_*ert 19
这里的问题是你没有任何被捕获的组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'
Run Code Online (Sandbox Code Playgroud)
反向引用\1是指匹配中的组1,它是与第一个带括号的子表达式匹配的部分.同样,\2是第2组,与第二个带括号的子表达式匹配的部分,依此类推.如果你使用\1少于1组,一些正则表达式引擎会给你一个错误,其他人将使用一个文字'\1'字符,一个ctrl-A; Python做后者,ctrl-A的规范表示是'\x01',所以这就是你这样看的原因.
组0是整场比赛.但在这种情况下,这不是您想要的,因为您不希望空格成为替换的一部分.
您需要g语法的唯一原因是简单的反向引用是不明确的.例如,如果是子123\1456,则无法判断这是否意味着123,后面是组1,后面跟着456,或者123后面跟着组1456,或者......
| 归档时间: |
|
| 查看次数: |
8126 次 |
| 最近记录: |