Ich habe die folgende Zeichenfolge:Konvertieren eine Zeichenfolge eine römische Zahl enthält, entspricht integer
str = "MMX Lions Television Inc"
Und ich brauche es in konvertieren:
conv_str = "2010 Lions Television Inc"
Ich habe die folgende Funktion eine römische umwandeln Ziffer in seine ganzen Zahl äquivalent:
numeral_map = zip(
(1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1),
('M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I')
)
def roman_to_int(n):
n = unicode(n).upper()
i = result = 0
for integer, numeral in numeral_map:
while n[i:i + len(numeral)] == numeral:
result += integer
i += len(numeral)
return result
Wie würde ich verwenden re.sub
das zu tun die richtige Zeichenfolge hier bekommen?
(Anmerkung: Ich habe versucht, die regex
hier beschriebenen. How do you match only valid roman numerals with a regular expression? aber es funktioniert nicht)
Gibt es einen Grund Sie nicht einen straight-up-Wörterbuch mit für Ihre römischen Ziffern zu halten, und dann mit den Tasten den Wert zu erhalten? – Makoto
@Makoto: Ja, weil die Reihenfolge, in der die Zahlen extrahiert werden, relevant ist. '1000' muss' M' sein - es kann nicht 'DD' oder' CCCCCCCCCC' sein, das Sie bekommen würden, wenn Sie ein Wörterbuch benutzen würden. Zumindest für Umrechnungen von dezimalen in römische Ziffern benötigen Sie die feste Reihenfolge der Ziffern. –