2014-03-05 50 views
0

我試圖取代西里爾文字的整機外觀以文本:正則表達式:應用re.sub(), B和西裏爾字母

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

打印 「раздватри」,而 「разчетыретри」是期待。

同時搜索()和的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

您應該通過與標誌關鍵字參數flags

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