2012-12-06 86 views
2

我試圖做到這一點找到替換非拉丁字所有!。蟒蛇在字符串與正則表達式

是否有可能找到用非正則表達式在非拉丁文本中替換非拉丁文字(整個單詞)? 如何?

編輯:

如果你想測試嘗試這些字符串:

>>> u_word = u'αβ' 
>>> u_text = u'αβγ αβ αβγδ δαβ' 
>>> new_word = u'χχ' 
>>> val = re.sub(r'\b' + u_word +r'\b', unicode(new_word), u_text) 
>>> val 
u'\u03b1\u03b2\u03b3 \u03b1\u03b2 \u03b1\u03b2\u03b3\u03b4 \u03b4\u03b1\u03b2' 
>>> u_text 
u'\u03b1\u03b2\u03b3 \u03b1\u03b2 \u03b1\u03b2\u03b3\u03b4 \u03b4\u03b1\u03b2' 
>>> 
+0

你介意加入u_word和new_word能夠測試 – locojay

+2

第二'\ B'必須在原始字符串......否則,它會解釋爲'\ x08' – JBernardo

回答

1

您需要的re.UNICODE標誌傳遞給sub,像這樣:

val = re.sub(r'\b' + u_word + r'\b', unicode(new_word), u_text, flags=re.UNICODE) 

\b是一個字的邊界。如果沒有re.UNICODE標誌,則「字」僅包含集合[a-zA-Z0-9_]中的字符,因此αβ不被視爲「單詞」。欲瞭解更多信息,請參閱the re documentation(特別是\b,\wre.UNICODE)。

FYI:

  • 如果new_word已經是一個unicode字符串(如你的例子),unicode(new_word)是多餘的,it returns new_word unmodified
  • 在Python 3.x中,unicode不再是特例。你的代碼可以像在Python 3.x中一樣工作(減去unicode(),因爲它不再需要而被刪除)。
相關問題