【发布时间】:2026-01-21 00:35:01
【问题描述】:
我有一个 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)
[出]:
La cinta, que hoy se estrena en nuestro país, competirá contra #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 是可以的。除非有办法解决这个问题。
【问题讨论】:
-
不知道为什么替换不了
La? -
因为它需要跳过第一个单词,因此
str.partition()
标签: python regex capitalization