Regex 正则表达式提取关键字之间的所有字符

Regex 正则表达式提取关键字之间的所有字符,regex,Regex,我有这样一句话: One Two Three ABC CDE - 26/01/2014 18:37:42 - S123456 - Four Five Six 并希望删除以下内容: ABC CDE - dd/mm/yyyy hh:mm:ss - S123456 - 上述行始终包括ABC和S123456-(但S123456可能会更改,即S987654)。删除从ABC到最后一个-(破折号)的文本 因此,剩下的是: One Two Three Four Five Six 我从这开始,但它对我不起

我有这样一句话:

One Two Three ABC CDE - 26/01/2014 18:37:42 - S123456 - Four Five Six
并希望删除以下内容:

ABC CDE - dd/mm/yyyy hh:mm:ss - S123456 - 
上述行始终包括ABCS123456-(但S123456可能会更改,即S987654)。删除从ABC到最后一个-(破折号)的文本

因此,剩下的是:

One Two Three Four Five Six
我从这开始,但它对我不起作用:

(?:.*?\s -\s){3}(.*)
如有任何帮助,我将不胜感激


谢谢。

好吧,这是一个相当通用的RE

echo "One Two Three ABC CDE - 26/01/2014 18:37:42 - S123456 - Four Five Six" | sed -E 's/[A-Z]{3} [A-Z]{3} - .* - S[0-9]{6} - //'

One Two Three Four Five Six

如果没有明确说明您的长期需求,我可以简单地匹配以下示例:

One Two Three ABC CDE - 26/01/2014 18:37:42 - S123456 - Four Five Six
A.*-\s


输出

One Two Three Four Five Six

太好了,谢谢你添加我想要的信息:)

尝试匹配:

ABC(?<!S\d{6} -).*S\d{6} -
ABC(?)?
并替换为一个空字符串


它是如何工作的?它与以下内容相匹配:

  • 以ABC开头
  • sxxxx-
    结尾,其中每个
    X
    都是一个数字(
    \d
  • 包含除
    sxxxx-

希望有帮助!

我还不太清楚……您如何准确地识别要删除的字符串部分?它是否总是以
ABC
开头,以
456-
结尾?还是总是前面加
3
,后面加
4
?我想我们可以使用一些更具体的信息为了帮助您:)@ccjmne添加了更多信息thxGreat,谢谢!下面是我的回复,我只是在发布之前测试了一下,所以我很确定它工作得很好:)