Reputation: 3299
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
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
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
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