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

如何使用re.sub替换列表中后跟数字的目标单词为指定字符串?

正确实现替换列表中后跟数字的单词

原代码的问题

  • 正则拼接错误:[0-9]是列表类型,不能直接和字符串拼接,应该用正则表达式字符串r'[0-9]+'(或更简洁的r'\d+')
  • 缺少单词边界:如果不限制单词边界,可能会误匹配包含目标单词的更长字符串(比如applepie34会被错误匹配)
  • 替换字符串未加引号:ball是变量而非字符串,应该写成'ball'

正确实现方案

基础版本(适用于单词无正则特殊字符的情况)

import re

list1 = ['apple', 'orange']
text = 'the books are good apple34, orange56 is sweet'
# 构建正则模式:匹配列表中任意单词作为完整单词,后跟一个或多个数字
pattern = r'\b(' + '|'.join(list1) + r')\d+'
# 替换匹配到的内容为'ball'
result = re.sub(pattern, 'ball', text)
print(result)  # 输出: the books are good ball, ball is sweet

健壮版本(兼容含正则特殊字符的单词)

如果列表中的单词包含.、*这类正则特殊字符,需要先用re.escape转义,避免正则解析错误:

import re

list1 = ['apple', 'orange.', 'pear*']
text = 'apple123 orange.456 pear*789 test'
# 转义每个单词后拼接正则模式
pattern = r'\b(' + '|'.join(map(re.escape, list1)) + r')\d+'
result = re.sub(pattern, 'ball', text)
print(result)  # 输出: ball ball ball test

代码说明

  • \b:单词边界,确保匹配的是独立的目标单词,不会误匹配长字符串中的子串
  • (...):分组,将列表中的单词作为一组进行匹配
  • \d+:匹配一个或多个数字,等价于[0-9]+
  • re.sub:将所有匹配到的符合规则的子串替换为指定字符串'ball'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:39:45