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?
(?<![A-Z])[A-Z]{3}(?![A-Z])
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.
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'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With