I have a little trouble extracting these two lists ‘[‘item1’, ‘item2’, ‘item3’] [‘item4’, ‘item5′]’ here is an example of the code I have attempted
import re pattern_matcher = re.compile(r"([,]])") alien_string = "Offering ['item1', 'item2', 'item3'] (4331)[6785] Requesting ['item4', 'item5'] (6998)[6766]. {0.255457} (0 left in queue)..." matches = pattern_matcher.fullmatch(alien_string) print(matches)
The output I received was
Output: None
I would like to know how I can go about extracting these two lists from this long string specifically [‘item1’, ‘item2’, ‘item3’] and [‘item4’, ‘item5’]
Advertisement
Answer
import re pattern = re.compile(r"[[^]]+?(?:, [^]]+?)+]") alien_string = "Offering ['item1', 'item2', 'item3'] (4331)[6785] Requesting ['item4', 'item5'] (6998)[6766]. {0.255457} (0 left in queue)..." matches = re.findall(pattern, alien_string) for match in matches: print(match)
Result:
['item1', 'item2', 'item3'] ['item4', 'item5']
Explanation:
[
matches the first bracket[^]]
matches anything that isnt a closed bracket[^]]*?
matches a variable number of non-bracket chars until the comma(?:
starts a non-capturing group (used forfindall
)
The rest should be self-explanatory.