Python: Strip Alles außer Zahlen

Ich muss eine Zahl (einen gemessenen Zeitwert) aus jeder von mehreren Strings extrahieren. Wie könnte ich das elegant machen? Alle Zahlen sind positiv und haben maximal zwei Dezimalstellen. (ZB 2,3 / 40,09 / 101,4 – keine nummern in e notation). Der Code, den ich suche, sollte so etwas wie den folgenden Pseudocode machen:

>>> "It took 2.3 seconds".strip(everything but ".1234567890") 2.3 

    2 Solutions collect form web for “Python: Strip Alles außer Zahlen”

    Statt Streifen wählen Sie für die Zahlen mit einem regulären Ausdruck:

     import re numbers = re.compile('\d+(?:\.\d+)?') numbers.findall("It took 2.3 seconds") 

    Demo:

     >>> import re >>> numbers = re.compile('\d+(?:\.\d+)?') >>> numbers.findall("It took 2.3 seconds") ['2.3'] 

    Dies gibt eine Liste aller Spiele zurück. Hier können Sie auch mehrere Zahlen in einer Zeichenfolge finden:

     >>> numbers.findall("It took between 2.3 and 42.31 seconds") ['2.3', '42.31'] 

    Wenn alles, was Sie tun möchten, alle Zeichen entfernen, die nicht in einem anderen String sind, würde ich so etwas wie folgendes vorschlagen:

     >>> to_filter = "It took 2.3 seconds" >>> "".join(_ for _ in to_filter if _ in ".1234567890") '2.3' 

    Es ist eine äußerst naive Möglichkeit, Zahlen zu extrahieren. Du solltest die Antwort von Martijn Pieters verwenden, wenn du mehr als nur einen einfachen Charakterfilter möchtest, wie du gefragt hast.

    Python ist die beste Programmiersprache der Welt.