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 (written 2011-03-28)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y108 - Python - String Handling [324] The backtick operator in Python and Perl - (2005-05-25)
[463] Splitting the difference - (2005-10-13)
[496] Python printf - (2005-11-15)
[560] The fencepost problem - (2006-01-10)
[773] Breaking bread - (2006-06-22)
[903] Pieces of Python - (2006-10-23)
[943] Matching within multiline strings, and ignoring case in regular expressions - (2006-11-25)
[954] Splitting Pythons in Bradford - (2006-11-29)
[970] String duplication - x in Perl, * in Python and Ruby - (2006-12-07)
[1110] Python - two different splits - (2007-03-15)
[1195] Regular Express Primer - (2007-05-20)
[1517] Python - formatting objects - (2008-01-24)
[1608] Underlining in Perl and Python - the x and * operator in use - (2008-04-12)
[1876] Python Regular Expressions - (2008-11-08)
[2284] Strings as collections in Python - (2009-07-12)
[2406] Pound Sign in Python Program - (2009-09-15)
[2692] Flexible search and replace in Python - (2010-03-25)
[2721] Regular Expressions in Python - (2010-04-14)
[2765] Running operating system commands from your Python program - (2010-05-14)
[2780] Formatted Printing in Python - (2010-05-25)
[2814] Python - splitting and joining strings - (2010-06-16)
[3090] Matching to a string - what if it matches in many possible ways? - (2010-12-17)
[3349] Formatting output in Python through str.format - (2011-07-07)
[3468] Python string formatting - the move from % to str.format - (2011-10-08)
[3469] Teaching dilemma - old tricks and techniques, or recent enhancements? - (2011-10-08)
[3796] Backquote, backtic, str and repr in Python - conversion object to string - (2012-07-05)
[3886] Formatting output - why we need to, and first Python example - (2012-10-09)
[4027] Collections in Python - list tuple dict and string. - (2013-03-04)
[4152] Why are bus fares so high? - (2013-08-18)
[4213] Formatting options in Python - (2013-11-16)
[4307] Identifying and clearing denial of service attacks on your Apache server - (2014-09-27)
[4360] Python - comparison of old and new string formatters - (2014-12-22)
[4593] Command line parameter handling in Python via the argparse module - (2015-12-08)
[4595] Python formatting update - including named completions - (2015-12-10)
[4659] Prining a pound sign from Python AND running from the command line at the same time - (2016-03-03)
Q806 - Regular Expression Cookbook [672] Keeping your regular expressions simple - (2006-04-05)
[1230] Commenting a Perl Regular Expression - (2007-06-12)
[1305] Regular expressions made easy - building from components - (2007-08-16)
[1840] Validating Credit Card Numbers - (2008-10-14)
[2165] Making Regular Expressions easy to read and maintain - (2009-05-10)
[2563] Efficient debugging of regular expressions - (2010-01-04)
[2608] Search and replace in Ruby - Ruby Regular Expressions - (2010-01-31)
[2702] First and last match with Regular Expressions - (2010-04-02)
[2727] Making a Lua program run more than 10 times faster - (2010-04-16)
[2804] Regular Expression Myths - (2010-06-13)
[3788] Getting more than a yes / no answer from a regular expression pattern match - (2012-06-30)
Some other Articles
Clickjacking - another way to get you to follow a malicious link - Facebook issueHow long is a speech?Panasonic Lumix TZ20How do I become a Linux System Administrator?Matching a license plate or product code - Regular ExpressionsVandalism and riot from the minority - the effectImages of a Spring WalkSolution looking for problemMelksham Campus - any last minute inputs from Melksham businesses?Should I use Open Source or Commercial software?