2016-10-12 1 views
0

Ich möchte ein reg Expressionsmuster für die folgende Zeichenfolge erstellen, und Python zu extrahieren:Wie kann ich diesen regulären Ausdruck Python lösen?

str = "hello w0rld how 34 ar3 44 you\n welcome 200 stack000verflow\n" 

Was ich will ist die unabhängige Zahlenwerte tun zu extrahieren und sie fügen die 278 werden sollte. ein prelimenary python-Code ist:

import re 
x = re.findall('([0-9]+)', str) 

Das Problem mit dem obigen Code ist, dass Zahlen in einem char String wie ‚ar3‘ auftauchen würden. Irgendeine Idee, wie man das löst?

Antwort

0

Wie wäre es damit? '^[0-9]*$'

0

Um eine teilweise Übereinstimmung Verwendung dieses zu vermeiden. Dies ergibt die exakt erwartete Ausgabe.

278 
1
s = re.findall(r"\s\d+\s", a) # \s matches blank spaces before and after the number. 
print (sum(map(int, s)))  # print sum of all 

\d+ Matches alle Ziffern:

x = re.findall('\s([0-9]+)\s', str) 
1

Warum nicht etwas einfacher wie dies versucht ?:

str = "hello w0rld how 34 ar3 44 you\n welcome 200 stack000verflow\n" 
print sum([int(s) for s in str.split() if s.isdigit()]) 
# 278 
0

Die bisher erzielten Lösungen nur (wenn überhaupt) für Zahlen arbeiten, die Leerzeichen werden vorangehen und folgen. Sie werden fehlschlagen, wenn eine Zahl am Anfang oder am Ende der Zeichenfolge auftritt oder wenn eine Zahl am Ende eines Satzes angezeigt wird. Dies kann vermieden werden unter Verwendung von word boundary anchors:

s = "100 bottles of beer on the wall (ignore the 1000s!), now 99, now only 98" 
s = re.findall(r"\b\d+\b", a) # \b matches at the start/end of an alphanumeric sequence 
print(sum(map(int, s))) 

Ergebnis: 297

Verwandte Themen