2016-10-07 1 views
0

Je veux faire correspondre les chiffres Situés entre « 000 » ou Situés entre \ b et « 000 » ou « 000 » et \ b d'une chaîne comme ceci:Regex trouver tous les modèles Situés entre chaîne

11101110001011101000000011101010111 

J'ai essayé avec de telles expressions:

(?<=000)\d+(?=000) 

mais je reçois seulement le plus grand événement

Je vous attendre à obtenir:

1110111 
1011101 
0 
11101010111 
+0

double possible de [Le drapeau 'g' dans les expressions régulières] (http://stackoverflow.com/questions/12993629/the-g -flag-en-régulière expressions) – dorukayhan

Répondre

1

Vous pouvez utiliser le regex package et la méthode .findall():

In [1]: s = "11101110001011101000000011101010111" 

In [2]: import regex 

In [3]: regex.findall(r"(?<=000|^)\d+?(?=000|$)", s) 
Out[3]: ['1110111', '1011101', '0', '00011101010111'] 

Le 000|^ et 000|$ contribuerait à correspondre soit à la 000 ou le début et la fin d'une chaîne respectivement. Notez également le ? après le \d+ - nous le faisons non-greedy.

Notez que le re.findall() échouerait avec l'erreur suivante régulière dans ce cas:

error: look-behind requires fixed-width pattern

C'est parce que re ne supporte pas lookarounds de longueur variable mais regex ne.

+0

Il ne fonctionne pas, j'ai essayé ce '(<= 000) [^ 0] \ d + (= 000 |?? \ b) | (<= \ b) [^0] \ d +? (? = 000 | \ b) 'mais maintenant il n'obtient pas le 0 entre" 000 "et" 000 " –

+0

J'ai résolu !! ? [^ 0] \ d + (= 000 Merci, ceci est le code qui fonctionne '[^ 0] \ d + (<= 000?)? (= 000 |? | \ B) (<= \ b?) | \ b) | (? <= 000) \ d (? = 000) ' –

1

vous pouvez le faire avec le module re comme ceci:

re.findall(r'(?:\b|(?<=000))(\d+?)(?:000|\b)', s)