我怎么能删除重复的信,但添加一些例外的信



im正在尝试使用python从instagram进行数据清理。
我需要删除那些重复的字母,但在(a,g(上只删除它们,直到有2个重复的字母(aa,gg(

看起来是这样的
输入:mengganti,maaf,ppuuutttiiiihhh,mmmmeeeeerrrraaaah,maagggz
所需输出:mengganti、maaf、putih、meraah、maaggz

我现在用regex做的是这样的:

re.compile(r'(.)1{1,}', re.IGNORECASE).sub(r'1',kalimat)

输入:mengganti,maaf,ppuuutttiiiihhh,mmmmeeeeerrraaaah,maagggz
当前输出:menganti、maf、putih、merah、magz
注意:不必使用regex

您可以首先捕获ag,并用2次组1替换。

([ag])1+

模式匹配:

  • ([ag])捕获组1,匹配ag
  • 1+对第1组匹配的相同字符重复1次以上

然后替换除ag或空白字符之外的所有字符,并替换为单个组1以删除重复字符。

([^sag])1+

模式匹配:

  • (捕获组1
    • [^sag]匹配除a或g之外的非空白字符
  • )关闭组1
  • 1+对第1组匹配的相同字符重复1次以上

例如

import re
s = "mengganti, maaf, ppuuutttiiiihhh, mmmmeeeeerrrraaaah, maaagggz"
print(re.sub(
r"([^sag])1+",
r"1",
re.sub(r"([ag])1+", r"11", s))
)

输出

mengganti, maaf, putih, meraah, maaggz

请参阅Python演示。


或者使用具有交替|的单个图案来组合具有2个捕获组的2个图案,并且使用具有λ:

import re
pattern = r"([ag])1+|([^sag])2+"
s = "mengganti, maaf, ppuuutttiiiihhh, mmmmeeeeerrrraaaah, maaagggz"
result = re.sub(
pattern,
lambda x: x.group(1) * 2 if x.group(1) else x.group(2),
s
)
if result:
print(result)

输出

mengganti, maaf, putih, meraah, maaggz

查看另一个Python演示或regex演示

正则表达式的替代方案是itertools.groupby:

from itertools import groupby
def remove_dups(seq, exclude):
# gather the intermediate results here
result = []
# for each letter and consecutive group it leads...
for letter, group in groupby(seq):
# get the length of the group
group_len = len(list(group))
if letter not in exclude or group_len < 2:
# e.g., either not "a" or "g", or appears once in a row
result.append(letter)
else:
# "a" or "g"; repeat by 2
result.append(letter * 2)
# new string with join
return "".join(result)

或等效于单线:

def remove_dups(seq, exclude):
return "".join(letter
if letter not in exclude or len(list(gr)) < 2
else 2 * letter
for letter, gr in groupby(seq))

groupby返回以字母为关键字的连续组。如果信件不被排除在外,则按原样放在那里;如果连续的字母数小于2,它仍然按原样放在那里。如果我们需要排除它,我们把它放在重复量为2的地方。

样品运行:

>>> remove_dups("mengganti", exclude={"a", "g"})
"mengganti"
>>> remove_dups("maaf", exclude={"a", "g"})
"maaf"
>>> remove_dups("ppuuutttiiiihhh", exclude={"a", "g"})
"putih"
>>> remove_dups("mmmmeeeeerrrraaaah", exclude={"a", "g"})
"meraah"

相关内容

  • 没有找到相关文章

最新更新