J'essaie de capturer une ligne de chaîne qui peut ou non avoir une virgule (: seulement 0 ou 1 virgule sera donnée). Ainsi, les données seront quelque chose comme ci-dessous et l'exécution de l'expression régulière se produira ligne par ligne. gâteau,...

1
PuffedRiceCrackers 15 mars 2021 à 06:58

1 réponse

Meilleure réponse

Utilisez ([^,]*)(?:,(.*))?:

  • ([^,]*) correspond à zéro ou plus "pas une virgule" et capture-le
  • (?:,(.*))? éventuellement, correspond à une virgule et capture tout ce qui suit

Remarque: (?:) est un groupe sans capture.

Démo Python:

import re

lines = ['cake,strawberry',
         'shortbread',
         'english-muffin,blueberry']

for line in lines:
    print(re.match('([^,]*)(?:,(.*))?',line).groups())
('cake', 'strawberry')
('shortbread', None)
('english-muffin', 'blueberry')
1
Mark Tolonen 15 mars 2021 à 04:07