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

如何按指定模式移除分号分隔字符串中指定关键词后的内容

解决方案:移除分号分隔字符串中每个子串"name"后的部分

嘿,这里有两种实用的方法帮你搞定这个需求,不管你是喜欢直观的分步处理还是简洁的正则表达式,都能轻松拿到想要的结果:

方法一:分步拆分+截取(直观易懂)

如果你偏好清晰的步骤,方便调试和修改,这个方法很合适:

a = "My name is Laura;My name is Martin;My name is Carl;"
# 把原字符串按分号拆分成子串列表
substrings = a.split(';')
# 遍历每个子串,只保留到"name"结束的部分
processed = []
for s in substrings:
    if 'name' in s:
        # 找到"name"的结束位置,截取前半部分
        end_idx = s.index('name') + len('name')
        processed.append(s[:end_idx])
    else:
        # 没有"name"的子串直接保留(处理边界情况)
        processed.append(s)
# 重新用分号连接,再加回末尾的分号
result = ';'.join(processed) + ';'

print(result)  # 输出:My name;My name;My name;

步骤解释:

  • 用split(';')把原字符串拆成子串列表,比如['My name is Laura', 'My name is Martin', 'My name is Carl', ''](末尾空串是因为原字符串最后有分号)
  • 对每个子串检查是否包含"name",如果有就计算"name"的结束位置,截取到该位置的内容;没有则直接保留
  • 最后用join把处理后的子串重新拼接,再加回末尾的分号,和原格式保持一致

方法二:正则表达式(简洁高效)

如果想写一行代码搞定,正则表达式是个不错的选择:

import re

a = "My name is Laura;My name is Martin;My name is Carl;"
# 替换每个"name"后面到分号/结尾的内容为"name"本身
result = re.sub(r'(name).*?(?=;|$)', r'\1', a)

print(result)  # 输出:My name;My name;My name;

正则逻辑解释:

  • (name):捕获"name"这个字符串,后面用\1引用这个捕获的内容
  • .*?(?=;|$):非贪婪匹配任意字符,直到遇到分号(;)或者字符串结尾($),这样精准定位到每个子串里"name"之后需要移除的部分
  • re.sub会把所有符合模式的部分替换成我们捕获的"name",直接得到目标结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:32:56