Main Content

Matching a license plate or product code - Regular Expressions

Archive - Originally posted on "The Horse's Mouth" - 2011-03-28 12:17:28 - Graham Ellis

Questions from my mailbox:

1. Regular expression to accept the following form of license plate numbers. Three letters followed by between 1 and 4 digits.
2. A regular expression to accept the following product codes: Between 1 and three characters (in capitals) followed by between one and three digits.




OK - for the newcomer to regular expressions, let me rephrase those:

1. How do I tell if a character string contains text that's in the right format for a car's number plate which (in the questioner's country) is three letters followed by between one and four digits. The questioner, I note, does NOT state that he wants to check for capital letters.

2. How do I tell if a character string contains text for a product code which consists of between one and three capital(?) letters, followed immediately by between one an three digits.

The answer to pattern matching of this sort is - as correctly identifified by my questioner - a regular expression. In regular expressions, we define a pattern and then ask if the incoming string matches the pattern - here is code (in Python, as I don't know what language my correspondent wants, and I'm feeling like writing some Python today!) that does the trick:

 import re
 
 samples = ["ABC1234", "ABC12", "ABC12345", "BC123", "ABC 14", "Abc123", "123ABC"]
 license_plate = re.compile(r"^[A-Z]{3}\d{1,4}$",re.I)
 product_code = re.compile(r"^[A-Z]{1,3}\d{1,4}$")
 
 for option in samples:
   ml = "No "; mp = "No "
   if license_plate.search(option): ml = "Yes"
   if product_code.search(option): mp = "Yes"
   print ml, mp, option


And here is the sample output:

wizard:mar11 graham$ python regex
Yes Yes ABC1234
Yes Yes ABC12
No No ABC12345
No Yes BC123
No No ABC 14
Yes No Abc123
No No 123ABC
wizard:mar11 graham$


I have made a number of assumptions here - that the product code or license plate number is the complete string, that neither of the formats allow embedded spaces, etc; these are the sort of pedantic issues you need to consider.

Regular Expressions can be daunting at first - but get much easier after explanation and a bit of practise. We cover them on our Python Courses ... and most of our other programming courses too ([list / schedule]). We also offer a special regular expression day - see [here] - for delegates who are familiar with a language, but need that extra bit of training and help with regular expressions. Exceptionally in what we teach, Lua includes a pattern matching scheme that is not based on regular expressions