Home > Software design >  Regex to match string 2 times but not 3
Regex to match string 2 times but not 3

Time:04-05

I try to regex match string like these examples:

NetTAP IPX C-4-16

SmartTAP DP6409 Dual E1-11-16

but not these ones:

NetTAP IPX C-4-16-0

SmartTAP DP6409 Dual E1-11-16-0

SYSTEM

I've tried some solutions without success.

My idea was to search the -\d\d 2 times but not 3 times

(?!\-\d )(\-\d ){2}$

or

[^(\-\d )](\-\d ){2}$

Could you help me?

CodePudding user response:

You can use

(?<!-\d )(?:-\d ){2}$

See the regex demo. Details:

  • (?<!-\d ) - a negative lookbehind that fails the match if there is a - char and one or more digits immediately to the left of the current location
  • (?:-\d ){2} - two repetitions of - and one or more digits
  • $ - end of string.

CodePudding user response:

You can also match 3 times what you want to avoid, and capture 2 times what you want to keep using a capture group.

(?:-\d ){3}$|(-\d -\d )$

The pattern matches:

  • (?:-\d ){3}$ Match 3 repetitions at the end of the string
  • | Or
  • (-\d -\d )$ capture 2 repetitions at the end of the string in group 1

Regex demo

  • Related