REGEX: Match text with the same special character inside

Viewed 63

I have multiple documents that I need to match some codes that we have inside: The codes have this structure: CRL-LLL-LLL-LLL-LLL-DDDDDD | Example: CRL-SYW-CON-LKA-TMP-800001

There're mainly correct cases, however, there some cases with this situation: CRL-SYW-CON-LKA-TMP-XXXXXX (Because they don't know the number)

Please look at this: https://gyazo.com/c950b3f687929d19fc7b2cf63cc9721c

Just testing in Sublime text, I came up with something using this: .*-\d{6} but it's take more parts that I don't need:

https://gyazo.com/e410a9267199f567b9d146ce9c3f1839

And idea could be something like this:

  • Read and find all strings starting with CRL
  • Stop until the next space
  • Return the string which contains at least 2 "-"

Thank you!!

1 Answers

You can use

re.findall(r'\bCRL(?:-[A-Z]{3}){4}-(?:\d{6}|X{6})\b', text)

See the regex demo.

Details:

  • \b - a word boundary
  • CRL - a CRL string
  • (?:-[A-Z]{3}){4} - four repetitions of - and 3 uppercase letters
  • - - a hyphen
  • (?:\d{6}|X{6}) - six digits or six X chars
  • \b - a word boundary
Related