60 votes

Correspondance uniquement avec la première occurrence dans une ligne avec Regex

Je suis complètement nouveau avec les regex et j'apprécierais vraiment toute aide.

La tâche est simple. J'ai un fichier CSV avec des enregistrements qui ressemblent à ceci :

12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890
12345,67890,12345,67890

J'aimerais remplacer la première virgule par un espace et laisser les autres virgules intactes, pour chaque ligne. Y a-t-il une expression regex qui ne correspondra qu'à la première virgule ?

J'ai essayé ceci : ^.....,. Cela correspond à la virgule, cependant, cela correspond également à toute la longueur de la chaîne précédant la virgule, donc si j'essaie de remplacer cela par un espace, tous les chiffres sont également supprimés.

0 votes

Quel outil utilisez-vous? (sed, perl, awk, autre chose?)

2 votes

Textpad (Windows)

1voto

Pour ne correspondre qu'à la première occurrence de toute expression regex, supprimez tous les drapeaux. Chaque expression regex est livrée avec les drapeaux possibles suivants et a généralement pour défaut d'utiliser le drapeau global qui correspondra à plus d'une occurrence :

  • /g = Avec ce drapeau, la recherche cherche toutes les correspondances, sans lui - seule la première correspondance est renvoyée
  • /i = insensible à la casse
  • /m = mode multi ligne
  • /s = tout . pour correspondre au caractère de saut de ligne \n
  • /u = unicode
  • /y = mode strict (recherche à un emplacement spécifique)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X