Regex and the OR operator without grouping in Python?

pedram picture pedram · Dec 20, 2012 · Viewed 27.9k times · Source

Here are the cases. I'm looking for the following pattern in a log file.

All strings are in the form of AB_N or CDE_N. AB and CDE are fixed letters, followed by an underscore. N can be either 2 or 3 numbers.

I tried (AB|CDE)_\d{2,3} but that returns a group. I can't do \w{2,3}\d{2,3} because it has to be either AB or CDE and not AC or FEG. Omitting the parentheses breaks too. I am sure the solution is simple but I'm new to python and regex and can't figure this out.

Answer

mattmc3 picture mattmc3 · Dec 20, 2012

A ?: inside a parenthesis in a regex makes it non-capturing. Like so: (?:AB|CDE)_\d{2,3}

See docs here: http://docs.python.org/3/library/re.html About a third of the way through it goes over the non-capturing syntax.