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

Python正则如何移除句尾以-开头、逗号结尾的字符串?

问题说明

现有字符串列表如下:

docs = ["This is blue -Gary,.", "Let's go swim. Sounds good -Mark,",
         "How are you? Mark says yes. Let's go - Grant,"]

需要移除每个字符串末尾、-和逗号之间的姓名内容,期望输出结果:

docs = ["This is blue", "Let's go swim. Sounds good",
             "How are you? Mark says yes. Let's go"]

之前尝试的正则代码未生效,无法实现需求:

re.sub(r'_^\b.*?[,]\s+', '', x)
失效原因

你写的正则存在几个逻辑错误:

  1. 开头的_^完全不符合匹配规则:^是匹配字符串起始位置的锚点,但需要删除的内容在字符串末尾,匹配方向完全错误,前缀的下划线也没有对应可匹配的实际字符
  2. 匹配顺序颠倒:目标片段结构是「尾部的- + 可选空格 + 姓名 + 逗号 + 可选尾部标点」,正则里先匹配逗号的逻辑和实际结构不符
  3. 没有锚定字符串末尾,容易误匹配句子中间的同类字符组合。
正确实现代码
import re

docs = ["This is blue -Gary,.", "Let's go swim. Sounds good -Mark,",
         "How are you? Mark says yes. Let's go - Grant,"]
result = [re.sub(r'\s*-\s*[^,]+,.*?$', '', item) for item in docs]

执行后result的值和预期输出完全一致。

正则规则说明

  • \s*-\s*:匹配连字符-,以及它前后可能存在的任意数量空白,兼容-Gary、- Grant这类不同的空格写法
  • [^,]+:匹配-之后到第一个逗号前的所有内容,也就是需要删除的姓名部分
  • ,.*?$:匹配逗号本身,以及逗号之后到字符串末尾的所有剩余字符(比如第一个字符串中逗号后的.),$锚定字符串末尾,避免误匹配句子中间出现的-和逗号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:21:34