2015-06-21 37 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它似乎并不介意...你需要找到自己的范围,但它是一个开始:)

希望这会有所帮助。