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

Linux下Sed截取匹配正则后的字符串及Python实现方案

问题描述

我有完整字符串:"^aloha_lang.maui_island_A_rams.blue.lagoon$",需要用正则表达式"maui_.*_rams"匹配,匹配成功后删除匹配部分之前的所有内容,期望输出:"^maui_island_A_rams.blue.lagoon$"。我尝试了命令 echo "^aloha_lang.maui_island_A_rams.blue.lagoon$" | sed 's/^[^maui_.*_rams]*//;p' 但没得到正确结果,求正确的Sed单行命令或Python正则实现方式?

解决方案

Sed单行命令

你之前的错误在于 [^maui_.*_rams] 是字符集匹配,而非正则模式匹配——它只会匹配不属于m、a、u、i、_、.、*、r、s这些单个字符的内容,逻辑完全不符合需求。

推荐两种正确写法:

  1. 捕获目标模式及后续内容,替换掉开头到目标模式前的部分:
echo "^aloha_lang.maui_island_A_rams.blue.lagoon$" | sed 's/^.*\(maui_.*_rams.*\)/\1/'
  1. 更简洁的写法,直接保留从maui_开始到结尾的内容:
echo "^aloha_lang.maui_island_A_rams.blue.lagoon$" | sed 's/^.*maui_/maui_/'

Python正则实现

方式一:用替换删除前缀

import re

original_str = "^aloha_lang.maui_island_A_rams.blue.lagoon$"
# 匹配开头到目标模式前的所有内容,替换为空
result = re.sub(r'^.*(?=maui_.*_rams)', '', original_str)
print(result)

方式二:直接捕获目标及后续内容

import re

original_str = "^aloha_lang.maui_island_A_rams.blue.lagoon$"
match_obj = re.search(r'(maui_.*_rams.*)$', original_str)
if match_obj:
    print(match_obj.group(1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:27:10