我需要用«non-breaking space»替換«статья1»,«статьи2»等所有正常空格的出現。下面 建設工作正常:爲什麼正則表達式不工作?
re.sub('(стат.{0,4}) (\d+)', r'\1 \2', text) # 'r' in repl is important, otherwise the word is not replaced correctly, at least for texts in Russian.
不過,我不希望重複使用re.sub
爲«статья»,然後«пункт»,隨後幾個月的名字,我想有正則表達式字典來表達和替換。這裏是我的代碼,但預期它不工作:'статья 1 статьи 2'
應該像'статья(non-breaking space here)1 статьи(non-breaking space here)2'
:
import re
text = 'статья 1 статьи 2'
dic = {'(cтат.{0,4}) (\d+)' : r'\1 \2'}
def replace():
global text
final_text = ''
for i in dic:
new_text = re.sub(str(i), str(dic[i]), text)
text = new_text
return text
print (replace())
希望這是Python 3.x?如果沒有,你有多個問題。 – abarnert
另外,你爲什麼要創建一個'final_text'變量,然後替換全局而不是使用它,然後返回全局? – abarnert
另外,你想在正則表達式模式中使用'r'前綴,而不僅僅是替換模式。你碰巧在這裏逃避,因爲'\ d'恰好意味着Python中的'\\ d'',但你永遠不應該指望它。 – abarnert