从字符串中删除所有带有两个或更少字母的单词,但单词“ no”除外

时间:2019-02-12 19:21:16

标签: python regex string

标题非常不言自明:在我的语言中,大多数“三个或更少”字母单词不会为文本增加价值,除了“否”一词可能会完全改变句子的含义。

我可以删除所有少于3个字母的单词,具体操作如下:

shortword = re.compile(r'\W*\b\w{1,3}\b')
df.text=df.text.apply(lambda x: shortword.sub('', x) )

我只需要输入一些条件语句以将“否”一词排除在外,但我不确定如何进行。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用

r'\W*\b(?!no)\w{1,2}\b'
       ^^^^^^

详细信息

  • \W*-0+个非单词字符
  • \b-单词边界
  • (?!no)-当前位置右侧,不能有no个char序列
  • \w{1,2}-1个或2个字符的字符(如果您只需要匹配字母个字符,请改用[^\W\d_]{1,2}
  • \b-单词边界

此外,您可以使用df['text'] = df['text'].str.replace(r'\W*\b(?!no)\w{1,2}\b', '')对单个列执行搜索和替换操作。