【发布时间】:2014-05-18 22:13:05
【问题描述】:
这是我在 django 视图中的代码(有意简化)(Python 2.7):
# -*- coding: utf-8 -*-
from django.shortcuts import render
import re
def index(request):
found_verses = []
pattern = re.compile('ю')
with open('d.txt', 'r') as doc:
for line in doc:
found = pattern.search(line)
if found:
modified_line = pattern.sub('!'+'\g<0>'+'!',line)
found_verses.append(modified_line)
context = {'found_verses': found_verses}
return render(request, 'myapp/index.html', context)
d.txt(也是 utf-8)包含这一行(特意简化):
1. Я сказал Юлию одному.
上面的内容在渲染时给了我预期的结果:
1. Я сказал Юли!ю! одному.
当我改成大写字母pattern = re.compile('Ю')时,它也给了我预期的结果:
1. Я сказал !Ю!лию одному.
但是当我更改为pattern = re.compile('[юЮ]') 或pattern = re.compile('[Юю]') 或pattern = re.compile('[ю]') 或pattern = re.compile('[Ю]') 组时,它什么也没给我。我想要得到的是:
1. Я сказал !Ю!ли!ю! одному.
请帮助我得到这个结果。我已经挣扎了一天多,尝试了不同的配置,例如pattern = re.compile('[юЮ]', re.UNICODE) 和pattern = re.compile('ю', re.UNICODE|re.I) 和this 以及无数其他配置,但都是徒劳的。
【问题讨论】:
-
很难判断您何时使用实际字符...您可以添加您在打印时看到的 repr 是什么吗?例如
print repr(line) -
@JoranBeasley,我明白了:
'1. \xd0\xaf \xd1\x81\xd0\xba\xd0\xb0\xd0\xb7\xd0\xb0\xd0\xbb \xd0\xae\xd0\xbb\xd0\xb8\xd1\x8e \xd0\xbe\xd0\xb4\xd0\xbd\xd0\xbe\xd0\xbc\xd1\x83.' -
我认为你只需要用 utf8
line = line.decode("utf8")将其解码为 unicode,然后我认为 wi 就可以了
标签: python regex django python-2.7 unicode