rpb
rpb

Reputation: 3299

Extract character in between special character with Regex Python

Unable to extract item in between special character = and & using the following code

import re
tags = ["letter1=A&letter2=B&letter3=C",
    "letter1=D&letter2=E&letter3=F"]


pat=r"^.*\='(.*)'\&.*$"
result = re.search(pat, tags [0])

Return empty.

But, I expect output as below

output

A B C

Upvotes: 2

Views: 79

Answers (3)

ThePyGuy
ThePyGuy

Reputation: 18466

For your expected output, look for the letter after = sign with one or no & at the end:

>>> re.findall('=(\w)[&]{0,1}', tags[0])
#output
['A', 'B', 'C']

Upvotes: 3

Sarvesh Chitko
Sarvesh Chitko

Reputation: 168

CODE:

import re
tags = [
    "letter1=A&letter2=B&letter3=C",
    "letter1=D&letter2=E&letter3=F"
    ]
pat=re.compile("(\w+)=(\w+)")
for tag in tags:
    print(pat.findall(tag))

OUTPUT:

[('letter1', 'A'), ('letter2', 'B'), ('letter3', 'C')]
[('letter1', 'D'), ('letter2', 'E'), ('letter3', 'F')]

Upvotes: 3

Kraigolas
Kraigolas

Reputation: 5590

To actually get your answer, you can just use split:

from itertools import chain
tags = ["letter1=A&letter2=B&letter3=C",
    "letter1=D&letter2=E&letter3=F"]
tags = chain.from_iterable(item.split("&") for item in tags)
result = [item.split("=")[1] for item in tags]
# ['A', 'B', 'C', 'D', 'E', 'F']

Based on your pattern, you can't really get A B C because C doesn't have = and & surrounding it. This code

import re
from itertools import chain
tags = ["letter1=A&letter2=B&letter3=C",
    "letter1=D&letter2=E&letter3=F"]
pattern = re.compile("=(.*?)&")
result = ' '.join(chain.from_iterable([pattern.findall(item) for item in tags]))

gives

A B D E

Upvotes: 0

Related Questions