gpt4 book ai didi

python - python 2.7+ 中的组引用无效

转载 作者:太空狗 更新时间:2023-10-30 00:23:00 27 4
gpt4 key购买 nike

我正在尝试将我网页(在 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>'"

查看 python help对于 re.sub,我尝试将\1 更改为\g<1> 但这会导致无效的组引用错误。

请帮助我了解如何让它工作

最佳答案

这里的问题是您在 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-一种; Python 执行后者,ctrl-A 的规范表示是 '\x01',所以这就是您这样看的原因。

第 0 组是整场比赛。但在这种情况下,这不是您想要的,因为您不希望空格成为替换的一部分。

您需要 g 语法的唯一原因是当一个简单的反向引用不明确时。例如,如果 sub 是 123\1456,则无法判断这是否意味着 123,然后是第 1 组,然后是 456,或 123 后跟组 1456,或...

Further reading on grouping and backreferences.

关于python - python 2.7+ 中的组引用无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13636733/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com