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

如何使用Python正则表达式从字符串中提取独立单词,修复匹配错误问题

问题原因

你当前的实现存在两个核心问题:

  1. 正则r'\W+'会匹配所有非字母、数字、下划线的字符,你直接将这类字符替换为空,原本用来分隔不同单词的符号(括号、引号、标点、换行符等)被直接移除,导致相邻单词拼接成了连续字符串。
  2. 输入字符串中存在HTML实体(比如")和转义序列(比如\\n),没有提前解码处理:转义符\被当做非单词字符删除后,剩下的n被当做普通字符保留,就出现了targetn这类不符合预期的结果。

修复方案

推荐直接用正则匹配提取所有符合要求的单词,再用空格拼接,比替换非单词字符的逻辑更稳妥,代码如下:

import re
import html

def extract_words(input_str):
    # 解码HTML实体,把"这类内容转换成实际的引号字符
    html_decoded = html.unescape(input_str)
    # 解码转义序列,把\\n这类内容转换成实际的控制字符
    escape_decoded = html_decoded.encode('utf-8').decode('unicode_escape')
    # 匹配所有由字母、数字、下划线组成的单词
    words = re.findall(r'[a-zA-Z0-9_]+', escape_decoded)
    # 用空格拼接所有单词
    return ' '.join(words)

# 测试示例
string1 = 'test,'
string2 = 'OS_LOG_ALERT("received'
string3 = 'target.\\n\");'

print(extract_words(string1))
print(extract_words(string2))
print(extract_words(string3))

运行后输出完全符合预期:

test
OS_LOG_ALERT received
target

如果你坚持要用替换逻辑实现,也可以参考以下写法:

import re
import html

def extract_words(input_str):
    html_decoded = html.unescape(input_str)
    escape_decoded = html_decoded.encode('utf-8').decode('unicode_escape')
    # 把所有非单词字符替换为空格
    replaced = re.sub(r'\W+', ' ', escape_decoded)
    # 合并连续空格、去除首尾空格
    return re.sub(r'\s+', ' ', replaced).strip()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:15:02