我在使用Python 2.7的Google App Engine上,这是代码片段:
# -*- coding: utf-8 -*-
KEYWORD = u"英語"
URL = u"http://www.google.com/"
content = u"和製英語(わせいえいご)とは、日本で作られた英語風の日本語語彙のことである。"
p=re.compile(u'('+ KEYWORD +u')(?!(([^<>]*?)>)|([^>]*?</a>))',re.UNICODE)
output=p.sub(u'<a href="'+ URL +'">\1</a>',content)
正则表达式和p.sub工作正常,但反向引用\1
不起作用! \1
的输出是这样的:ន
我尝试使用encode('utf-8')
修改代码,但结果是相同的:
p=re.compile(u'('+ KEYWORD +u')(?!(([^<>]*?)>)|([^>]*?</a>))'.encode('utf-8'),re.UNICODE)
output=p.sub(u'<a href="'+ URL +'">\1</a>'.encode('utf-8'),content.encode('utf-8'))
有谁能告诉我出了什么问题?
答案 0 :(得分:4)
将\1
的字符串转换为原始字符串,方法是在其前面添加r
:
output=p.sub(u'<a href="'+ URL +r'">\1</a>',content)
这可以防止1被解释为反向引用1.证明:
# -*- coding: utf-8 -*-
import re
KEYWORD = u"英語"
URL = u"http://www.google.com/"
content = u"和製英語(わせいえいご)とは、日本で作られた英語風の日本語語彙のことである。"
p=re.compile(u'('+ KEYWORD +u')(?!(([^<>]*?)>)|([^>]*?</a>))',re.UNICODE)
print p.sub(u'<a href="'+ URL +'">\1</a>',content)
print p.sub(u'<a href="'+ URL +r'">\1</a>',content)
打印
和製<a href="http://www.google.com/"></a>(わせいえいご)とは、日本で作られた<a href="http://www.google.com/"></a>風の日本語語彙のことである。
和製<a href="http://www.google.com/">英語</a>(わせいえいご)とは、日本で作られた<a href="http://www.google.com/">英語</a>風の日本語語彙のことである。
只有后者有效(英语在谷歌链接中)。