pedram
pedram

Reputation: 3087

Regex and the OR operator without grouping in Python?

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.

Upvotes: 26

Views: 33956

Answers (2)

mattmc3
mattmc3

Reputation: 18345

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.

Upvotes: 55

BrenBarn
BrenBarn

Reputation: 251478

The non-capturing group syntax is (?:...). So do (?:AB|CDE)_\d{2,3}. This is documented along with everything else.

Upvotes: 4

Related Questions