正则表达式:re.sub(),\ b和西里尔字符

时间:2014-03-05 05:09:03

标签: python regex python-2.7 cyrillic

我正试图在文本中替换整个西里尔字的外观:

# -*- coding: utf-8 -*-
import re
S = u"раз Два трИ".lower()
print re.sub(ur"\bдва\b", u"четыре", S, re.U)

打印“раздватри”,而“разчетыретри”是预期的。

同时search()和findall()运行良好:

print re.search(ur"\bдва\b", S, re.U).group(0)
print re.findall(ur"\bдва\b", S, re.U)

这是re.sub()的唯一问题

拉丁字符很好用:

S = u"one Two threE".lower()
print re.sub(ur"\btwo\b", u"four", S, re.U)

如果我尝试以下方式,它会吞下空格(看起来很难看:

print re.sub(u"[^а-яё\d]два[^а-яё\d]", u"четыре", S)

尝试保留空格不起作用:

print re.sub(u"(?:[^а-яё\d])(два)(?:[^а-яё\d])", u"четыре", S)

替换也没有帮助:

S = u"раз Два трИ".lower()
print S
S.replace(u"два", u"четыре")
print S

两次打印“раздватри”。

1 个答案:

答案 0 :(得分:1)

您应该使用关键字参数flags传递标记:

In [3]: S = u"раз Два трИ".lower()
In [5]: print re.sub(ur"\bдва\b", u"четыре", S, flags=re.U)
раз четыре три