Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Regex statement to check for three capital letters

Tags:

python

regex

I need a regex statement that will check for three capital letters in a row.

For example, it should match: ABC, aABC, abcABC

But it should not match: AaBbBc, ABCDE

At the moment this is my statement:

'[^A-Z]*[A-Z]{3}[^A-Z]*'

But this matches ABCDE. What am I doing wrong?

like image 686
Hayley van Waas Avatar asked Oct 12 '25 06:10

Hayley van Waas


1 Answers

Regex

(?<![A-Z])[A-Z]{3}(?![A-Z])

Explanation

I specified a negative lookbehind and a negative lookahead before and after the middle regex for three capitals in a row, respectively.

This is a better option compared to using a negated character class because it will successfully match even when there are no characters to the left or right of the string.

Online Demonstration

DEMO


As for the Python code, I haven't figured out how to print out the actual matches, but this is the syntax:

Using re.match:

>>> import re
>>> p = re.compile(r'(?<![A-Z])[A-Z]{3}(?![A-Z])')
>>> s = '''ABC
... aABC
... abcABCabcABCDabcABCDEDEDEDa
... ABCDE'''
>>> result = p.match(s)
>>> result.group()
'ABC'

Using re.search:

>>> import re
>>> p = re.compile(r'(?<![A-Z])[A-Z]{3}(?![A-Z])')
>>> s = 'ABcABCde'
>>> p.search(s).group()
'ABC'
like image 197
Vasili Syrakis Avatar answered Oct 14 '25 19:10

Vasili Syrakis