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

时间:2014-01-31 01:37:06

标签: 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

我这是一个开始,但它不适合我:

(?:.*?\s -\s){3}(.*)

非常感谢任何协助。

感谢。

3 个答案:

答案 0 :(得分:1)

如果没有明确指出您的长期要求,我可以简单地匹配这样的示例:

A.*-\s


<强>输出

One Two Three Four Five Six

答案 1 :(得分:1)

完美,感谢您添加我要求的信息:)

尝试匹配:

ABC(?<!S\d{6} -).*S\d{6} -

替换为空字符串


它是如何工作的?它符合以下内容:

  • ABC
  • 开头
  • SXXXXXX -结尾,其中每个X都是数字\d)。
  • 包含除.*
  • 之外的任何内容(SXXXXXX -

希望它有所帮助!

答案 2 :(得分:0)

这里有一个相当普遍的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