我如何使用正则表达式来搜索unicode文本并查找包含重复字母的单词?

问题描述 投票:1回答:1

我有一个包含波斯语和阿拉伯语人士注释的数据集。一些注释包含诸如عاااالی的词,这不是一个真正的词,而正确的词实际上是عالی。就像使用woooooooow!而不是WoW!

我的意图是找到这些单词并删除所有多余的字母。我发现的唯一参考是下面的代码,该代码删除了重复字母的单词:

import re
p = re.compile(r'\s*\b(?=[a-z\d]*([a-z\d])\1{3}|\d+\b)[a-z\d]+', re.IGNORECASE)
s = "df\nAll aaaaaab the best 8965\nUS issssss is 123 good \nqqqq qwerty 1 poiks\nlkjh ggggqwe 1234 aqwe iphone5224s"
strs = s.split("\n")                   
print([p.sub("", x).strip() for x in strs])

我只需要用已删除多余重复字母的单词替换这个单词。您可以将此句子用作测试用例:

سلاااااام چطووووورین؟ من خیلی گشتم ولی مثل این کیفیت اصلاااااا ندیدممممم.

必须是这样:

سلام چطورین؟ من خیلی گشتم ولی مثل این کیفیت اصلا ندیدم

请考虑超过3个重复是不可接受的。

python regex unicode
1个回答
1
投票

您可以使用

re.sub(r'([^\W\d_])\1{2,}', r'\1', s)

它将用相同的出现替换相同连续字母的块。

请参见regex demo

详细信息

  • [([^\W\d_])-捕获组1:任何Unicode字母]
  • [\1{2,}-在组1中捕获的相同字母的两个或多个重复。

r'\1'替换将只在结果中保留一个字母。

© www.soinside.com 2019 - 2024. All rights reserved.