如何在正则表达式中包含重音词
How to Include accented words in regex
我有一个 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#
above all , 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
也没关系。除非有解决办法。
因为 \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)
您是否有机会使用 unicode 表示法来捕获 运行ges 个字符?示例:[\xC0-\xE1] 或什么?我在 Pythex 之前 运行 它似乎并不介意...你需要找到自己的 运行ge,但这是一个开始 :)
希望对您有所帮助。
我有一个 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# above all , 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
也没关系。除非有解决办法。
因为 \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)
您是否有机会使用 unicode 表示法来捕获 运行ges 个字符?示例:[\xC0-\xE1] 或什么?我在 Pythex 之前 运行 它似乎并不介意...你需要找到自己的 运行ge,但这是一个开始 :)
希望对您有所帮助。