Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python regex to match only first instance

Tags:

python

regex

I have a python code and i'm reading a certificate and matching only the root cert. For ex my certificate is as below:

--------begin certificate--------
CZImiZPyLGQBGRYFbG9jYWwxGjAYBgoJkiaJk/IasdasdassZAEZFgp2aXJ0dWFsdnB4MSEw
HwYDVQQDExh2aXJ0dWFsdnB4LVZJUlRVQUxEQzEtQ0EwHhfdgdgdgfcNMTUwOTE2MTg1MTMx
WhcNMTcwOTE2MTkwMTMxWjBaMQswCQYDVQQGEwJVUzEXMBUGCgmSJoaeqasadsmT8ixkARkW
B3ZzcGhlcmUxFTATBgoJkiaJk/IsZAEZFgVsb2NhbDEOMAwGA1UEChMFdmNlcnfrrfgfdvQx
CzAJBgNVBAMTAkNBMIIBIjANBgkqhkiG9w
--------end certificate----------
--------begin certificate--------
ZGFwOi8vL0NOPXZpcnR1YWx2cHgtcvxcvxvVklSVFVBTERDMS1DQSxDTj1BSUEsQ049UHVi
bGljJTIwS2V5JTIwU2VydmldfsfhjZXMsQ049U2VydmfffljZXMsQ049Q29uZmlndXJhdGlv
bixEQz12aXJ0dWFsdnB4LERDPWxvY2FsP2NxvxcvxcvBQ2VydGlmaWNhdGU/YmFzZT9vYmpl
Y3RDbGFzcz1jZXJ0aWZpY2F0aW9uQXV0dsfsdffraG9yaXR5MD0GCSsGAQQBgjcVBwQwMC4G
--------end certificate----------

I want to fetch only the root certificate, which starts with CZImiZPy. I read the certificate into the variable data and applying the below regex

re.sub('-----.*?-----', '', data)

But it fetched both the encrypted certificates and not just the first one. Is there any better way I can tweak the regular expression?

like image 671
Sandy Avatar asked Feb 08 '23 17:02

Sandy


1 Answers

re.sub can get a count variable as a parameter:

re.sub(pattern, repl, string, count=0, flags=0)

The optional argument count is the maximum number of pattern occurrences to be replaced..

If you want to only change the first match, do the following:

re.sub('-----.*?-----', '', data, 1)

Note that if you want to extract, you shouldn't use re.sub. Visit the re module to learn about all available functions that help you extracting patterns from a string.

like image 187
Maroun Avatar answered Feb 15 '23 10:02

Maroun