Friday 4 December 2020

Regex does not match if special character in string

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,
  1. will be From string beginning until : a.) first capitalized letter b.) OR until comma c.) OR until number
  • So (2ndgroup) Brand:
  1. 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
  2. IF 1st clause complete, then Brand is from next first Capital letter until first capital letter or number
  3. IF Not 1st clause AND Not 2nd clause AND Not start with number, then Brand is blank
  4. From end of Type group until next first Capital letter OR number OR comma
  5. AND Do not contains more than 1 digit
  • So (3rd group) Collection
  1. will be between 2nd and 4rd groups (if nothing between groups then blank)
  2. OR same like Brand 1st clause
  3. 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
  1. IF TYPE and BRAND and COLLECTION is already found, then everything left
  2. will be from last word with first capital letter until end
  3. 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