You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用re.sub()替换单词后缀?为何出现str与int的&操作不支持报错?

解决单词后缀“ion”或“s”的删除问题

问题分析

你需要删除单词末尾的“ion”或“s”后缀、保留前面内容,但之前的代码存在逻辑错误:

  1. 第一段代码re.sub(r'[a-z]+ion', "", llw)中,正则[a-z]+ion会匹配从单词开头到ion的全部字符,替换成空后直接删掉了整个匹配的单词,而非仅删除后缀。
  2. 第二段代码的错误点:
    • re.search参数顺序颠倒,正确格式是re.search(正则表达式, 目标文本),你写成了re.search(r'[a-z]+ion', "", llw),把空字符串作为搜索文本,llw被当成flags参数,导致类型错误。
    • re.search返回匹配对象或None,不能直接用is True判断,只需if re.search(...)即可。
    • re.sub不会修改原字符串,必须将返回结果重新赋值给变量才会生效。
    • 未处理s后缀的需求。

正确实现方式

1. 处理单个单词

使用正则匹配单词末尾的ion或s,替换为空:

import re

word = "reflection"
processed_word = re.sub(r'(ion|s)$', '', word)
print(processed_word)  # 输出: reflect

word2 = "tests"
processed_word2 = re.sub(r'(ion|s)$', '', word2)
print(processed_word2)  # 输出: test
  • 正则(ion|s)$中,$表示匹配字符串末尾,确保只删除单词结尾的后缀。

2. 处理整段文本

结合单词边界\b,批量处理文本中的所有单词:

import re

text = "reflections tests example cats action"
processed_text = re.sub(r'\b(\w+?)(ion|s)\b', r'\1', text)
print(processed_text)  # 输出: reflect test example cat act
  • \b匹配单词边界,确保只处理完整单词;
  • (\w+?)捕获单词中除后缀外的部分,(ion|s)匹配后缀;
  • 替换为\1即保留捕获的前缀部分,删除后缀。

内容的提问来源于stack exchange,提问作者dmoses

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 07:11:05