> For the complete documentation index, see [llms.txt](https://thamizhiniyancs.gitbook.io/writeups/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://thamizhiniyancs.gitbook.io/writeups/hackerrank/python/regex-and-parsing.md).

# Regex and Parsing

{% embed url="<https://www.hackerrank.com/domains/python?badge_type=python&filters%5Bsubdomains%5D%5B%5D=py-regex>" %}

## Detect Floating Point Number

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2Frvog32Jgt1CCY3EYLHGB%2Fimage.png?alt=media&amp;token=0fa21331-5e6b-4fe9-b2bb-0770fe9d97a8" alt=""><figcaption></figcaption></figure>

```python
import re

for _ in range(int(input())):
    if re.match(r'^[+-]?\d*\.\d+$', input()):
        print(True)
    else:
        print(False)
```

***

## Re.split()

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FzM4RLHXM1u8wmzex9XSi%2Fimage.png?alt=media&amp;token=605ed0c7-a90b-4cc7-bfff-a72533727354" alt=""><figcaption></figcaption></figure>

```python
regex_pattern = r'[,.]'	# Do not delete 'r'.

import re
print("\n".join(re.split(regex_pattern, input())))
```

***

## Group(), Groups() & Groupdict()

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FjKV9GhX0iGDed0PP9CSK%2Fimage.png?alt=media&amp;token=5154a395-c8dd-4194-964c-8a7ae6cba70d" alt=""><figcaption></figcaption></figure>

```python
import re

matches = re.match(r".*?([a-zA-Z\d])\1.*", input())

if matches:
    print(matches.group(1))
else:
    print(-1)

```

***

## Re.findall() & Re.finditer()

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2F2Jix8Q5FBnGnpu8FNYed%2Fimage.png?alt=media&amp;token=1d5966b8-ec55-4334-bed8-36d1b9068c65" alt=""><figcaption></figcaption></figure>

```python
import re

matches = re.findall(r"(?<=[^aeiouAEIOU])([aeiouAEIOU]{2,})(?=[^aeiouAEIOU])", input())

if matches:
    for each in matches:
        print(each)
else:
    print(-1)
```

***

## Re.start() & Re.end()

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FjsjaiuldW80OJvm2PGoH%2Fimage.png?alt=media&amp;token=911831a7-c05a-4588-8fec-c887ba249a29" alt=""><figcaption></figcaption></figure>

```python
import re

s = input()
k = input()
match = list(re.finditer(rf"(?=({k}))", s))

if match:
    for each in match:
        print((each.start(1), each.end(1) - 1))
else:
    print((-1, -1))
```

***

## Validating Roman Numerals

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2Foq51fUnvSyNu5zwuw8gP%2Fimage.png?alt=media&amp;token=c0f479d8-44b1-423a-87c1-89c2349a3163" alt=""><figcaption></figcaption></figure>

```python
regex_pattern = r"^M{0,3}(C[MD]|D?C{0,3})(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$"

import re
print(str(bool(re.match(regex_pattern, input()))))
```

***

## Validating Phone Numbers

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FTNxO62EAgsKFccV9y46l%2Fimage.png?alt=media&amp;token=f2773eea-6ce8-4b28-a936-37873f5222f5" alt=""><figcaption></figcaption></figure>

```python
import re

for _ in range(int(input())):
    match = re.match(r"^[789]\d{9}$", input())
    
    if match:
        print("YES")
    else:
        print("NO")
```

***

## Validating and Parsing Email Addresses

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2Fsp4X4rONNa3U7bwKlXvs%2Fimage.png?alt=media&amp;token=f14d5bab-8deb-448a-8c39-2c856fb0e309" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FCypshRioDSnuXoMX2UCt%2Fimage.png?alt=media&amp;token=cefdccd4-11fe-41a9-b3dd-e9704333fb51" alt=""><figcaption></figcaption></figure>

```python
import re
import email.utils

for _ in range(int(input())):
    parsedAddr = email.utils.parseaddr(input())
    match = re.match(r"^[a-zA-Z][\w\-\.]*@[a-zA-Z]+\.[a-zA-Z]{1,3}$", parsedAddr[1])
    
    if match:
        print(email.utils.formataddr(parsedAddr))
```

***

## Hex Color Code

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FSEt1NI2kzlVas9c3Mba6%2Fimage.png?alt=media&amp;token=e9a1ee45-86f9-4ba7-8479-f831c3402ddc" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2Fnl8VrFPlDoFpmyRDkDmv%2Fimage.png?alt=media&amp;token=9dd4f5f0-36ba-4e32-9ace-07985ccfc44e" alt=""><figcaption></figcaption></figure>

```python
import re
import sys

css = sys.stdin.read()

for each in re.findall(r"[ ,:](#[\dabcdefABCDEF]{6}|#[\dabcdefABCDEF]{3})", css):
    print(each)
```

***

## HTML Parser - Part 1

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FK1W8Iqnnp0kyKaEDw8ZE%2Fimage.png?alt=media&amp;token=97711654-22bb-47a5-b3e1-7bf1831a0379" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FiZi5U2TjoAr3dznCm5oN%2Fimage.png?alt=media&amp;token=b1d1c2bc-e06c-4a3c-81f1-0fe4f43f2202" alt=""><figcaption></figcaption></figure>

```python
from html.parser import HTMLParser
import sys

html = sys.stdin.read()


class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("Start".ljust(5) + " :", tag)
        for attr in attrs:
            print(f'-> {attr[0]} > {attr[1]}')

    def handle_endtag(self, tag):
        print("End".ljust(5) + " :", tag)

    def handle_startendtag(self, tag, attrs):
        print("Empty".ljust(5) + " :", tag)
        for attr in attrs:
            print(f'-> {attr[0]} > {attr[1]}')


parser = MyHTMLParser()

parser.feed(html)
```

***

## HTML Parser - Part 2

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FQPe8g1E7Ni0aNui0P3SM%2Fimage.png?alt=media&amp;token=d4dc0e38-c283-4f28-b24a-8fdb0e27e5b9" alt=""><figcaption></figcaption></figure>

```python
from html.parser import HTMLParser
import sys

n = int(input())
html = sys.stdin.read()


class MyHTMLParser(HTMLParser):
    def handle_comment(self, data):
        if len(data.split('\n')) > 1:
            print(">>> Multi-line Comment")
            print(data)
        else:
            print(">>> Single-line Comment")
            print(data)

    def handle_data(self, data):
        if data != "\n":
            print(">>> Data")
            print(data)


parser = MyHTMLParser()

parser.feed(html)
```

***

## Detect HTML Tags, Attributes and Attribute Values

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FYXNuOEqyGWuVsLtxskog%2Fimage.png?alt=media&amp;token=71878c0e-9e97-495c-830b-98f4e680f8ae" alt=""><figcaption></figcaption></figure>

```python
from html.parser import HTMLParser
import sys

html = sys.stdin.read()


class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print(tag)
        for attr in attrs:
            print(f'-> {attr[0]} > {attr[1]}')

    def handle_startendtag(self, tag, attrs):
        print(tag)
        for attr in attrs:
            print(f'-> {attr[0]} > {attr[1]}')


parser = MyHTMLParser()

parser.feed(html)
```

***

## Validating UID

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FkFJYX9N7AEPuLGS2yXnp%2Fimage.png?alt=media&amp;token=3a525daf-127a-4696-b515-183af24d04e8" alt=""><figcaption></figcaption></figure>

```python
import re

for _ in range(int(input())):
    if re.match(r"^(?!.*(.).*\1)(?=.*[A-Z].*[A-Z])(?=.*\d.*\d.*\d)[A-Za-z0-9]{10}$", input()):
        print("Valid")
    else:
        print("Invalid")
```

***

## Regex Substitution

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FBPLo0X61cfpM4jryrjaQ%2Fimage.png?alt=media&amp;token=e990f140-1854-45ea-a810-58ef4054a331" alt=""><figcaption></figcaption></figure>

```python
import re
import sys

n = int(input())
html = sys.stdin.read()

print(re.sub(r'(?<= )\|\|(?= )', 'or', re.sub(r'(?<= )&&(?= )', 'and', html)))
```

***

## Validating Credit Card Numbers

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2F76nR0PnZy2GJ3ZWV5Brn%2Fimage.png?alt=media&amp;token=538384dd-fc63-4110-b3ee-1cb1edbcd3e1" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FjxfSPNNY8pPRYXpnTjma%2Fimage.png?alt=media&amp;token=4f9ef936-3bdd-49fe-951b-68dbf0d3570e" alt=""><figcaption></figcaption></figure>

```python
import re

for _ in range(int(input())):
    if re.match(r'^[456]\d(\d)(?!\1\-?\1{2})\d(-?)\d{2}(\d)(?!\3\-?\3{2})\d\2\d{2}(\d)(?!\4\-?\4{2})\d\2\d{2}(\d)(?!\5\-?\5{2})\d$', input()):
        print('Valid')
    else:
        print('Invalid')
```

***

## Validating Postal Code

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2F1LL80yy66foZVaic3Mde%2Fimage.png?alt=media&amp;token=6cc0949f-94f2-4774-883e-f2825c1d34ba" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FpOajGh5kEmwTr50M8VEk%2Fimage.png?alt=media&amp;token=7e669a37-5cf4-48da-a8ea-0261648a6824" alt=""><figcaption></figcaption></figure>

```python
# Use PyPy3
regex_integer_in_range = r'^[1-9]\d{5}$'	# Do not delete 'r'.
regex_alternating_repetitive_digit_pair = r'(\d)(?=\d\1)'	# Do not delete 'r'.


import re
P = input()

print (bool(re.match(regex_integer_in_range, P)) 
and len(re.findall(regex_alternating_repetitive_digit_pair, P)) < 2)
```

***

## Matrix Script

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FE02YIW5C1s4AqFWUM78T%2Fimage.png?alt=media&amp;token=8b9de312-b3ff-4c18-a50b-adffae7b0b1b" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3452970062-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FhMewGT4PbQ5e1zQPC4Ko%2Fuploads%2FJKUIu6xTl8uXJy9KGOrJ%2Fimage.png?alt=media&amp;token=3df3d866-c06c-4823-9491-58452d655ede" alt=""><figcaption></figcaption></figure>

```python
import re

n, m = map(int, input().strip().split())

matrix = [list(input()) for _ in range(n)]

decodedScript = "".join(["".join(each) for each in list(zip(*matrix))])

print(re.sub(r'\b\W+\b', ' ', decodedScript))
```
