【问题标题】:regular expressions: remove Greek words with capital letters正则表达式:删除带有大写字母的希腊词
【发布时间】:2021-07-13 10:07:35
【问题描述】:

我想删除带有大写字母的希腊词,例如:

text = 'Ο Κώστας θέλει να ΠΑΙΞΕΙ ΑΎΡΙΟ ποδόσφαιρο στο σχολείο' 

输出应该是

text = 'Ο Κώστας θέλει να ποδόσφαιρο στο σχολείο'

我检查了这个Regular expression : Remove words with Capital letters,但我不知道如何将代码采用到希腊字母表中。

【问题讨论】:

  • 什么是你的代码?有什么问题?
  • @WiktorStribiżew 您链接的 Java 答案不适用于 Python(我试过),因此重新打开。
  • @AKX 什么不起作用?那只是意味着你没有尝试得足够好。

标签: python regex


【解决方案1】:

我们可以(通过查阅 Unicode 图表)看到希腊字母大约在 U+0370..U+1FFF 范围内,然后使用 unicodedata 模块进行过滤:

>>> import unicodedata
>>> greek_capital_chars = set(chr(cp) for cp in range(0x0370, 0x1FFF) if "GREEK CAPITAL" in unicodedata.name(chr(cp), ""))
{'Β', 'Χ', 'ᾛ', 'Ἁ', 'Ὼ', 'ᾜ', 'ᾫ', 'Ἂ', 'Ὰ', 'Ἑ', 'Ω', 'Ἤ', 'Ε', 'Ρ', 'Η', 'ᾏ', 'Ϳ', 'Ή', 'Ἣ', 'Ἵ', 'ᾋ', 'Ύ', 'ᾚ', 'Ή', 'Ϲ', 'Ί', 'Ὥ', 'Ύ', 'Ξ', 'Ὄ', 'Ο', 'Θ', 'Ϗ', 'Ϋ', 'Ͻ', 'ᾘ', 'Ὑ', 'Ώ', 'Ᾰ', 'ᾝ', 'Ἐ', 'Ὦ', 'Ά', 'Σ', 'Ὂ', 'Ἱ', 'Ὤ', 'Ͷ', 'Ὴ', 'Ό', 'Ψ', 'ῼ', 'Φ', 'Ἒ', 'Ὕ', 'ᾪ', 'Ἅ', 'Ῑ', 'Ἧ', 'Λ', 'Ἢ', 'Ϸ', 'Ἔ', 'Ί', 'Ἇ', 'Ἲ', 'Ὓ', 'Ζ', 'Τ', 'Ὗ', 'Ϊ', 'Ͽ', 'Μ', 'Ὀ', 'Ἄ', 'ᾊ', 'Κ', 'Γ', 'Ὶ', 'Ϻ', 'Ᾱ', 'ᾬ', 'Ώ', 'Ἳ', 'Ἥ', 'Ἦ', 'Ι', 'Ἃ', 'ᾌ', 'Ὁ', 'Έ', 'Δ', 'Ὡ', 'Ἆ', 'Ἰ', 'ϴ', 'Ͼ', 'Ῠ', 'ῌ', 'Ἓ', 'Ἕ', 'Έ', 'Ὃ', 'Ὠ', 'ᾈ', 'Ͱ', 'ᾼ', 'Ὢ', 'ᾙ', 'ᾞ', 'ᾎ', 'Ὸ', 'Ῥ', 'Ἀ', 'Ὣ', 'Ͳ', 'Ἶ', 'Ῐ', 'ᾮ', 'ᾍ', 'Ἡ', 'Ῡ', 'Ὧ', 'ᾉ', 'ᾩ', 'ᾯ', 'ᾭ', 'ᾟ', 'Ό', 'Α', 'Ὲ', 'Υ', 'Π', 'Ἴ', 'Ά', 'Ἷ', 'ᾨ', 'Ὅ', 'Ὺ', 'Ν', 'Ἠ'}

然后,您可以形成一个匹配此类字符的单词(连续运行)的正则表达式。我们还将包括拉丁大写字符。

>>> import re
>>> import string
>>> chars_class = re.escape("".join(greek_capital_chars.union(string.ascii_uppercase)))
>>> r = re.compile(f"[{chars_class}]+")
>>> text = 'Ο Κώστας θέλει να ΠΑΙΞΕΙ ΑΎΡΙΟ ποδόσφαιρο στο σχολείο'
>>> r.sub("", text)
' ώστας θέλει να   ποδόσφαιρο στο σχολείο'

正则表达式当然也会删除任何大写字母;你不妨这样做

>>> r = re.compile(f"[{chars_class}]{{2,}}")
>>> r.sub("", text)
'Ο Κώστας θέλει να   ποδόσφαιρο στο σχολείο'

或类似的,具体取决于您的用例。

【讨论】:

  • 非常感谢您的宝贵帮助!这正是我想要的!使用 {{2,}} 表示一个单词超过 2 个字母,对吧?
  • @George 是的,两个或多个连续的字母。您还可以尝试使用 \b\s 锚点让正则表达式与单词边界一起工作。
  • 非常感谢您的帮助!在我们应该删除任何以大写字母开头且仅包含大写字母的文本和空格块的情况下,有什么方法可以采用您的代码?
  • f"[{chars_class}][{chars_class} ]+"?
  • 我也是这么想的,但是这个输入 = 'Ο ΚΩΣΤΑΣ ΘΕΛΕΙ。 να ΠΑΙΞΕΙ ΑΎΡΙΟ ποδόσφαιρο στο σχολείο',输出为'。 να ποδόσφαιρο στο σχολείο',但我想要这个输出 = 'να ΠΑΙΞΕΙ ΑΎΡΙΟ ποδόσφαιρο στο σχολείο'。
猜你喜欢
  • 2021-10-07
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 2013-11-26
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
相关资源
最近更新 更多