使用正则表达式删除重复的特殊字符(如果单独存在,而不是被单词或数字包围时)

2024-06-18 15:42:10 发布

您现在位置:Python中文网/ 问答频道 /正文

如果字符串作为单个字符存在,如何从字符串中删除特殊字符。我正在尝试一个推特作者分类模型,我的想法是一些人使用特殊字符作为商标,这可以帮助模型更好地判断,例如

P!nk
A$AP

是两位独立歌手的商标。我想删除单个和重复的特殊字符,例如

whatt??
This is Good. I want both dots removed.
I'm thinking....

但是不想删除#hashtag_for_life或类似的东西

我用过

re.sub(r'([\W_])\1+',' ','hi my % na$me is @shady #for_life')

但在个人方面失败了。有人能提供一个解决方案吗

编辑:示例

我怎样才能转换

'p!nk & A$AP are 2 singers..... what? are the b0th rappers? ? ? NO!! #singer ##rapper @shady'

'p!nk A$AP are singers what are the b0th rappers NO #singer #rapper @shady'

这意味着个别数字消失,个别特殊字符消失,尾部特殊字符消失,重复特殊字符被更改为单个特殊字符,这些字符在中间或在单词的开头。p>


Tags: 字符串模型foris字符whatareap
1条回答
网友
1楼 · 发布于 2024-06-18 15:42:10

请您试试下面的菜单好吗

import re
str = 'p!nk & A$AP are 2 singers..... what? are the b0th rappers? ? ? NO!! #singer ##rapper @shady'

str = re.sub(r'(?<=\s)[\W\d](?=(\s|$))', '', str)
str = re.sub(r'(?<=\w)\W+(?=(\s|$))', '', str)
str = re.sub(r'(\W)\1+(?=\w)', r'\1', str)

print(str)

输出:

p!nk A$AP are singers what are the b0th rappers NO #singer #rapper @shady
  • (?<=\s)[\W\d](?=(\s|$))匹配单个非字母或数字 由空格包围的字符或在行尾
  • (?<=\w)\W+(?=(\s|$))匹配以下单个非字母字符 一句话
  • (\W)\1+(?=\w)匹配两个或多个连续的非字母字符 在一个词之前

相关问题 更多 >