In python how to print a character before a matching pattern that occur multiple times?

Question:

I have a stringified data from which I’m trying to print a character that occurs before a matching pattern. This matching pattern will occur multiple times so the result can also be a list of characters

E.g

Stringified data is [[1, "[{"name": "john", "id": "1"}]", [2, "[{"name": "john", "id": "1"}]"]

The matching pattern from the data will be , "[

The Expected result is 1 2

As we can see the charecter 1 and 2 is printed before each occurance of , "[

Asked By: Lalas M

||

Answers:

Purely on the basis of what’s asked in the question (and not wondering WHY?) one could do this:

astring = '[[1, "[{"name": "john", "id": "1"}]", [2, "[{"name": "john", "id": "1"}]"]'

pattern = ', "['

offset = 0
pchars = []

while (index := astring[offset:].find(pattern)) >= 0:
    if offset + index > 0:
        pchars.append(astring[offset+index-1])
    offset += index + 1

print(*pchars)

Output:

1 2
Answered By: Cobra

Let me assume that the data you posted is JSON (because it looks like JSON) and you just made a mistake when posting the data here, because the number of opening and closing brackets does not match.

In that case, please do not use Regex at all. Use JSON instead:

import json
data = '[[1, "[{\"name\": \"john\", \"id\": \"1\"}]"], [2, "[{\"name\": \"john\", \"id\": \"1\"}]"]]'
parsed = json.loads(data)
for arr in parsed:
    print(arr[0], end=" ")

Why? Because JSON can be formatted in different ways. It may be pretty printed, it may have additional spaces. Building a Regex which matches all the possible formats is probably harder that expected.

Answered By: Thomas Weller
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.