/ / Regex: Groupe OR Groupe - regex, état, virgule, groupe regex, ville

Regex: groupe OU groupe - expression régulière, état, virgule, groupe regex, ville

J'ai un fichier texte entrant, délimité par des barres, dans lequel un champ est censé contenir l'état virgule de la ville. Un exemple:

|Boston, MA|

Dans mon application, je dois capturer la ville et l'état en deux champs différents. Cela fait partie d'une regex plus grande pour traiter une ligne entière, mais la partie qui gère ce champ est:

|(.+),(.+[^|]+)|

Et cela capture le texte avant la virgule dans un groupe et le texte après dans un autre groupe. Fonctionne très bien lorsque le champ est rempli comme prévu.

Mon problème est que parfois, ce champ entrera soit avec:

  • AUCUNE information entre les barres (||)

ou - Texte sans virgule (|unknown|)

Et j'ai besoin de modifier cette regex pour que:

  • S'il n'y a pas d'information entre les barres, j'obtiens toujours 2 groupes avec des valeurs vides

  • S'il existe une chaîne de texte sans virgule, cette chaîne est capturée en tant que groupe 1 et le groupe 2 est capturé avec une valeur vide.

Réponses:

2 pour la réponse № 1

Avec cette regex, vous devriez obtenir ce que vous attendez:

|s*([^,|]*?)s*(?:,s*([^|]*?)s*)?|

Il remplit les groupes 1 et 2. S'il n'y a pas de virgule, vous obtenez un groupe 2 vide. S'il n'y a pas de valeur (ou d'espace blanc) entre les barres, vous obtenez deux groupes vides.

Si vous souhaitez que les espaces blancs fassent partie des correspondances, l'expression rationnelle ressemblera à ceci:

|([^,|]*)(?:,([^|]*))?|