2016-12-15 15 views
0

Die string1: "4-5%" und string2: "5%"
Die erwartete Ausgabe: "Prozent 4 bis Prozent 5", "Prozent 5".Regex: bedingte Substitution mit Gruppenname in Python

Meine 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) 

Was ich für die erste (percent["string"]="4-5%") erhalten ist (?(range)percent 5 to)percent 7), und es funktioniert nicht für die zweite (wenn string = "5%")

Ich weiß, Der Wert des repl kann keine Bedingungen enthalten, aber (wie) kann ich implementieren, was ich will? Kann ich in diesem Zusammenhang nur zwei Regex verwenden?

+0

3 regex tun? Überprüfe meine Antwort. – MYGz

+0

Ich sah dies: http://StackOverflow.com/a/17476793/3552975 – lerner

Antwort

0

So ähnlich?

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))) 

Ausgang:

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