Home > Software engineering >  Regex match text after last '-'
Regex match text after last '-'

Time:10-24

I am really stuck with the following regex problem:

I want to remove the last piece of a string, but only if the '-' is more then once occurring in the string.

Example:

BOL-83846-M/L -> Should match -M/L and remove it

B0L-026O1 -> Should not match

D&F-176954 -> Should not match

BOL-04134-58/60 -> Should match -58/60 and remove it

BOL-5068-4 - 6 jaar -> Should match -4 - 6 jaar and remove it (maybe in multiple search/replace steps)

It would be no problem if the regex needs two (or more) steps to remove it. Now I have

[^-]*$

But in sublime it matches B0L-026O1 and D&F-176954

Need your help please

CodePudding user response:

You can match the first - in a capture group, and then match the second - till the end of the string to remove it.

In the replacement use capture group 1.

^([^-\n]*-[^-\n]*)-.*$
  • ^ Start of string
  • ( Capture group 1
    • [^-\n]*-[^-\n]* Match the first - between chars other than - (or a newline if you don't want to cross lines)
  • ) Capture group 1
  • -.*$ Match the second - and the rest of the line

Regex demo

  • Related