2016-12-15 3 views
0

La chaîne1: "4-5%" et chaîne2: "5%"
La sortie attendue: "pourcentage 4 à 5%", "pourcentage 5" respectivement.regex: substitut conditionnel avec nom de groupe en Python

Mon regex:

percent = 
    { 
     "pattern": "(?P<range>(?P<from>[\d.]+)(%)?[?\-~ ~〜~—])?(?P<to>[\d.]+)%", 
     "repl": r"(?(range)percent \g<from>to)percent\g<to>)", 
     "string": thestring 
    } 

print re.sub(**percent) 

Ce que je reçois pour la première (percent["string"]="4-5%") est (?(range)percent 5 to)percent 7), et il ne fonctionne pas pour la deuxième (lorsque string = "5%")

Je sais la valeur du repl ne peut pas contenir de conditions mais (comment) puis-je implémenter ce que je veux? Puis-je utiliser seulement deux regex dans ce contexte?

+0

3 regex fera? Vérifie ma réponse – MYGz

+0

J'ai vu ceci: http://stackoverflow.com/a/17476793/3552975 – lerner

Répondre

0

Quelque chose comme ça?

import re 

a=""" 
4-5% 
hello world 4-5% hello world 
5% 
""" 
print re.sub(r'(\d)%', r'\1', re.sub(r'-',r' to ',re.sub(r'(\d(?=(-\d)?%))',r'percent \1',a))) 

Sortie:

percent 4 to percent 5 
hello world percent 4 to percent 5 hello world 
percent 5