Home > Back-end >  Python RegEx for all National Drug Codes (NDC 10 & 11) formats
Python RegEx for all National Drug Codes (NDC 10 & 11) formats

Time:03-10

Goal: RegEx to fit many posible NDC 10 & 11 formats.

I've made a great start... NDC 10:

^[0-9][0-9][0-9][0-9]\-[0-9][0-9][0-9][0-9]\-[0-9][0-9]$

e.g. 1234-1234-12 Reference


However, I've since learnt there are other formats and 11 digits:

  • 4-4-2
  • 5-3-2
  • 5-4-1
  • 5-4-2 (11 digits)

How can I write one RegEx for all these possibilities?

Issues:

  1. Optional 11th digit,
  2. Moving hyphen

CodePudding user response:

You can use

^(?:\d{4}-\d{4}-\d{2}|\d{5}-(?:\d{3}-\d{2}|\d{4}-\d{1,2}))$

See the regex demo. Details:

  • ^ - start of string
  • (?: - start of the first non-capturing group:
    • \d{4}-\d{4}-\d{2} - four digits, -, four digits, -, two digits
    • | - or
    • \d{5}- - five digits, -
    • (?: - start of the second non-capturing group:
      • \d{3}-\d{2} - three digits, -, two digits
      • | - or
      • \d{4}-\d{1,2} - four digits, - and one or two digits
    • ) - end of the second non-capturing group
  • ) - end of the first non-capturing group.
  • $ - end of string.
  • Related