Python 列表推导中使用正则表达式删除字符

Removing Characters With Regular Expression in List Comprehension in Python

我正在学习 python,我正在尝试进行一些文本预处理,我一直在阅读和借鉴 Whosebug 的想法。我能够在下面提出以下公式,但它们似乎没有达到我的预期,而且它们也没有抛出任何错误,所以我很困惑。

首先,在 Pandas 数据框列中,我试图删除单词中的第三个连续字符;这有点像 运行 对应该有两个连续字符而不是三个连续字符的单词进行拼写检查

buttter = butter
bettter = better
ladder = ladder

我使用的代码如下:

import re
docs['Comments'] = [c for c in docs['Comments'] if re.sub(r'(\w){2,}', r'', c)]

在第二种情况下,我只想用最后一个替换多个标点符号。

????? = ?
..... = .
!!!!! = !
----  = -
***** = *

我的代码是:

docs['Comments'] = [i for i in docs['Comments'] if re.sub(r'[\?\.\!\*]+(?=[\?\.\!\*])', '', i)]

看起来你想用

docs['Comments'] = docs['Comments'].str.replace(r'(\w){2,}', r'', regex=True)
    .str.replace(r'([^\w\s]|_)()+', r'', regex=True)

r'(\w){2,}' 正则表达式找到三个或更多重复的单词字符,</code> 替换为它们出现的两个字符。参见 <a href="https://regex101.com/r/F5Hx90/1" rel="nofollow noreferrer">this regex demo</a>。</p> <p><code>r'([^\w\s]|_)()+' 正则表达式匹配重复的标点字符并将最后一个标点字符捕获到第 2 组,因此 将匹配替换为最后一个标点字符。参见 this regex demo