2016-12-14 1 views
1

j'ai un changelog qui a les numéros de version entre crochets comme ceci:Regex - Extrait tous les textes sauf crochets et leur contenu

## [0.3.0] - 2016-12-13 - FIX This is an example fix - FEATURE An example feature

Je veux extraire ne les numéros de version, donc je je suis parti avec:

[Unreleased] [0.3.0] [0.2.4] [0.2.3]

Idéalement, je voudrais extraire uniquement la première valeur entre crochets qui ne sont pas « Unreleased » si je reçois le dernier numéro de version 0.3.0 même si je ne suis pas sûr que ce soit possible dans regex.

Quelqu'un peut-il aider? Merci :)

+1

Quel outil/langage utilisez-vous? – Bohemian

+2

Qu'avez-vous essayé jusqu'à présent, et qu'en est-il de votre tentative qui ne répond pas à vos besoins? – Welbog

+0

'(\ [. *? \])' Essayez ceci. – MYGz

Répondre

2

Vous pouvez utiliser une expression régulière comme ceci:

.*(\[.*?\]).* 

Avec la chaîne de remplacement: \1

BTW, si vous voulez supprimer tous les autres textes, vous pouvez utiliser:

.*(\[.*?\]).*|* 

Working demo

Mise à jour: si vous voulez transformer le changelog dans une liste de versions, je pourrais venir avec cette regex:

.*(\[.*?\])[\s\S]*?(^$|\z) 

Working demo

+0

C'est parfait! Et si vite, merci Federico :) – alidrongo

+0

'[^ [\ r \ n] + (?: \ R [^ [\ r \ n] +) * \ R? | (\ [[^]] * \]) 'devrait être une amélioration des performances pour votre dernière regex. '[^ [\ r \ n] + | (\ [[^]] * \])' pour le précédent. –

+0

@SebastianProske, très agréable à savoir. Merci pour le commentaire. –