I have some data
text = ['Akumuliatorinis gręžtuvas Skil 3010AA 18V 1x2.5Ah', 'Atsegama torto kepimo forma 26 X 7.5 cm. Domoletti Choco 00701KSE', 'Atsispaudimų atramos LS3164A', 'Atspari dėmėms staltiesė ruda 140240cm', 'Desertinė lėkštė Acelya 21 cm', 'Edukacinis žaidimas Clementoni 100 Eksperimentų 50572 LT/LV/EE', 'Forma kepimo 22 cm Domoletti', 'Gimnastikos kilimėlis 173x61x0.4 rožinė', 'Konstruktorius Playmobil, Lėlių namas 5167', 'Konstruktorius Playmobil, Policijos nuovada, 6919', 'Lėkštė desertinė Akcent, 21 cm', 'Puodas Brasserie 4.5l/24cm 1018865 ketus', 'Puodas Brasserie 6.5l/27cm 1018867 ', 'Puodas Fivestar Legend 20cm/3.3L ', 'Puodas Grant 16x10.5 2l', 'Rankšluostis Lasa 560297283680 Red, 50x100 cm, 1 vnt.', 'Rankšluostis Lasa 902 14 2307 Pure 902 14 2307 Pure Red, 70x140 cm, 1 vnt.', 'Rinkinys Kristalų laboratorija 28809', 'Elektrinis dantų šepetėlis Oral-B PRO1 790, 2 vnt', 'Skalbimo mašina - džiovyklė LG F4DN408S0', 'Kavos aparatas De'Longhi EDG160.A', 'Elektrinis dantų šepetelis Braun Oral-B Genius X 20000N']
I need to loop through each line and extract words based on some rules
Expected result:
- Akumuliatorinis gręžtuvas, Skil, 3010AA, 18V 1x2.5Ah
- Atsegama torto kepimo forma, 26 X 7.5 cm., Domoletti, Choco, 00701KSE -> 2nd goes to to end of 3rd group concatenated with Choco, Atsegama torto kepimo forma, Domoletti, Choco 26 X 7.5 cm., 00701KSE
- Atsispaudimų atramos,,,LS3164A
- Atspari dėmėms staltiesė ruda,, 140240cm,
- Desertinė lėkštė, Acelya,, 21 cm
- Edukacinis žaidimas, Clementoni, 100 Eksperimentų, 50572 LT/LV/EE
- Forma kepimo, 22 cm, Domoletti, -> 2nd goes to to end of 3rd group -> Forma kepimo, Domoletti, 22 cm,,
- Gimnastikos kilimėlis,, 173x61x0.4, rožinė
- Konstruktorius Playmobil,, Lėlių namas 5167
- Konstruktorius Playmobil,, Policijos nuovada, 6919
- Lėkštė desertinė, Akcent,, 21 cm
- Puodas, Brasserie, 4.5l/24cm, 1018865 ketus
- Puodas, Brasserie, 6.5l/27cm, 1018867
- Puodas, Fivestar, Legend, 20cm/3.3L
- Puodas, Grant, 16x10.5, 2l
- Rankšluostis, Lasa, 560297283680 Red, 50x100 cm 1 vnt.
- Rankšluostis, Lasa, 902 14 2307 Pure 902 14 2307 Pure Red, 70x140 cm, 1 vnt.
- Rinkinys,, Kristalų laboratorija, 28809
- Elektrinis dantų šepetėlis, Oral-B, PRO1 790, 2 vnt
- Skalbimo mašina - džiovyklė, LG,, F4DN408S0
- Kavos aparatas, De'Longhi,, EDG160.A
- Elektrinis dantų šepetelis, Braun, Oral-B Genius, X 20000N
So need to get array of **{Type, Brand, Collection, Model} **
each group (must ignoring special characters like /.- space '`)
- So (1st group) TYPE,
- will be From string beginning until : a.) first capitalized letter b.) OR until comma c.) OR until number
- So (2ndgroup) Brand:
- IF start from number until first following letter in next word OR until number, and contains x OR cm OR ' (including spaces, for example "22 x 28 cm"), then move this group to 3d group
- IF 1st clause complete, then Brand is from next first Capital letter until first capital letter or number
- IF Not 1st clause AND Not 2nd clause AND Not start with number, then Brand is blank
- From end of Type group until next first Capital letter OR number OR comma
- AND Do not contains more than 1 digit
- So (3rd group) Collection
- will be between 2nd and 4rd groups (if nothing between groups then blank)
- OR same like Brand 1st clause
- OR start from end of Brand group (if Brand group meet 4th clause) until next first Capital letter OR number OR comma
- So (4th group) Model
- IF TYPE and BRAND and COLLECTION is already found, then everything left
- will be from last word with first capital letter until end
- IF last word do not contains digits, then last two words or last two letters
import regex
[y for x in text for y in regex.split(r' +', x)]]
https://regex101.com/r/duA2Hq/10
from Regex does not match if special character in string
No comments:
Post a Comment