2015-06-21 36 views
1

如何包含重音的話我有一個UTF-8文本與大寫單詞在文本中:在正則表達式

La cinta, que hoy se estrena en nuestro país, competirá contra Hors la 
Loi, de Argelia, Dogtooth, de Grecia, Incendies, de Canadá, Life above 
all , de Sudáfrica, y con la ganadora del Globo de Oro, In A Better 
World, de Dinamarca. 

所需的輸出是替換以大寫字母開頭,以一個佔位符的所有字(即#NE#),第一個詞除外。因此,所需的輸出看起來像是這樣的:

>>> import re 
>>> def blind_CAPS_without_first_word(text): 
...  first_word, _, the_rest = text.partition(' ') 
...  blinded = re.sub('(?:[A-Z][\w]+\s*)', ' #NE# ', the_rest) 
...  return " ".join([first_word, blinded]) 
... 
>>> text = "La cinta, que hoy se estrena en nuestro país, competirá contra Hors la Loi, de Argelia, Dogtooth, de Grecia, Incendies, de Canadá, Life above all , de Sudáfrica, y con la ganadora del Globo de Oro, In A Better World, de Dinamarca." 
>>> blind_CAPS_without_first_word(text) 

[出]:

的La辛塔,闕HOY SE estrena連接NUESTRO

La cinta, que hoy se estrena en nuestro país, competirá contra #NE# 
la #NE# , de #NE# , #NE# , de #NE# , #NE# , de #NE#, #NE# above 
all , de #NE# , y con la ganadora del #NE# de #NE# , #NE# A #NE# #NE# , de #NE# . 

我使用正則表達式如下嘗試país,competirácontra#NE# la#NE#,de#NE#,#NE#,de#NE#,#NE#,de#NE#á,#NE# 首先,de#NE#áfrica, y con con ganadora del#NE#de#NE#,#NE#A#NE##NE#,de#NE#。

但在使用時\w,例如正則表達式沒有考慮重音字符Canadá - >#NE# á; Sudáfrica - >#NE# áfrica我該如何解決這個問題?如何在我的正則表達式中包含重音詞?它需要是Canadá - >#NE#; Sudáfrica - >#NE#

我想如果忽略像A這樣的單個字符單詞仍然是A就沒關係。除非有解決這個問題。

+0

我不知道爲什麼它不能取代'La'? –

+0

,因爲它需要跳過第一個單詞,因此'str.partition()' – alvas

回答

1

因爲\w+[\w]+將不匹配重音字符。所以它不符合這些詞。

您可以使用的\S+代替\w+

re.sub(r'[A-Z]\S+\s*', ' #NE# ', the_rest) 

OR

使用正則表達式的模塊,如果你只是想匹配任何語言的單詞字符。

regex.sub(r'[A-Z]\p{L}+\s*', ' #NE# ', the_rest) 
+0

我知道'\ w'與重音字符不匹配。什麼是解決問題? – alvas

+0

檢查我的更新.. –

+0

ahhh非空白字符。 – alvas

0

你有可能使用unicode符號捕獲字符範圍嗎?例如:[\ xC0- \ xE1]什麼的?我跑了它Pythex它似乎並不介意...你需要找到自己的範圍,但它是一個開始:)

希望這會有所幫助。