如何在正则表达式中包含重音词

时间:2015-06-21 02:53:10

标签: python regex capitalization

我在文本中有一个带有大写单词的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#),第一个单词除外。所以期望的输出看起来如此:

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# .

我尝试使用正则表达式如下:

>>> 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)

[OUT]:

  

La cinta,que hoy se estrena ennuestropaís,competiráconstate#NE#   la#NE#,de#NE#,#NE#,de#NE#,#NE#,de#NE#á,#NE#   首先,de#NE#áfrica,y con la 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,那也没关系。除非有解决方法。

2 个答案:

答案 0 :(得分:2)

因为\w+[\w]+与重音字符不匹配。所以它无法匹配这些词。

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

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

如果您只想匹配任何语言的字符,请使用正则表达式模块。

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

答案 1 :(得分:0)

您是否有机会使用unicode表示法捕获字符范围?例如:[\ xC0- \ xE1]还是什么?我按Pythex运行它并且它似乎并不介意......你需要找到自己的范围,但它是一个开始:)

希望这有帮助。