2016-08-01 21 views
-5

Angenommen, ich habe eine Zeichenfolge wie:Entfernen Zahlen mit Buchstaben aus String gemischt

string = 'This string 22 is not yet perfect1234 and 123pretty but it can be.' 

ich irgendwelche Zahlen zu entfernenden , die mit Worten gemischt werden, wie 'perfect1234' und '123pretty', aber nicht'22' , von meinem String und eine Ausgabe erhalten, wie folgt:

string = 'This string 22 is not yet perfect and pretty but it can be.' 

gibt es eine Möglichkeit, dies in Python zu tun mit regex oder andere Meth od? Jede Hilfe wäre willkommen. Vielen Dank!

+1

Ersetzen Sie alle '\ d +' durch '''' – Tushar

+0

siehe hier: http://stackoverflow.com/questions/12851791/removing-numbers-from-string – danielhadar

+1

Scheint wie OP will nur Ziffern, die Teil von sind zu beseitigen Wörter, keine Ziffern in der Zeichenfolge. (Wortgrenze zählt) – Keozon

Antwort

1
import re 
re.sub(r'\d+', '', string) 
+0

sollte rohe Zeichenkettenliterale für Regex 'r '\ d +'' verwenden und überprüft nicht, ob die Zahlen Teil eines Wortes sind, das auch Alphazeichen enthält (was die Absicht zu sein scheint) – Keozon

+0

@Keozon Ja, rohe Zeichenkette ist besser Ich würde meine Antwort ändern. Aber was meinst du mit "Zahlen sind Teil eines Wortes", kannst du ein Beispiel geben? – kxxoling

+0

Danke für deine Hilfe! Ich möchte nichts behalten, das das folgende Format in meinem String hat: '700/-' "+91 1234567891", "3appedared", "Vora02261794300Will". Zahlen oder Wörter wie die letzten beiden im Beispiel sollten nach der Verarbeitung nicht in der Zeichenfolge vorhanden sein. – PJay

3
s = 'This string 22 is not yet perfect1234 and 123pretty but it can be.' 

new_s = "" 
for word in s.split(' '): 
    if any(char.isdigit() for char in word) and any(c.isalpha() for c in word): 
     new_s += ''.join([i for i in word if not i.isdigit()]) 
    else: 
     new_s += word 
    new_s += ' ' 

Und als Ergebnis:

'This string 22 is not yet perfect and pretty but it can be.' 
+0

Komplizierter als eine Regex (IMO), aber wahrscheinlich schneller in Python: Gute Antwort, und ich denke eher an die ursprüngliche Absicht des OP's. – Keozon

0

Der folgende Code überprüft jedes Zeichen für eine Ziffer. Wenn es keine Ziffer ist, wird das Zeichen am Ende der korrigierten Zeichenfolge hinzugefügt.

string = 'This string is not yet perfect1234 and 123pretty but it can be.' 

CorrectedString = "" 
for characters in string: 
    if characters.isdigit(): 
     continue 
    CorrectedString += characters 
+0

Vielen Dank! Das funktioniert! – PJay

0

Sie können dies versuchen, indem Sie einfach Funktion verbinden und so gut wie nichts

str_var='This string is not yet perfect1234 and 123pretty but it can be.' 

str_var = ''.join(x for x in str_var if not x.isdigit()) 
print str_var 

Ausgang zu importieren:

'This string is not yet perfect and pretty but it can be.' 
+1

Vielen Dank! Dies sollte helfen! – PJay

2

Wenn Sie Ziffern erhalten möchten, die von ihnen selbst sind (nicht Teil eines Wortes mit Alpha-Zeichen darin), wird diese Regex die Arbeit tun (aber es gibt wahrscheinlich eine Möglichkeit, es einfacher zu machen):

import re 
pattern = re.compile(r"\d*([^\d\W]+)\d*") 
s = "This string is not yet perfect1234 and 123pretty but it can be. 45 is just a number." 
pattern.sub(r"\1", s) 
'This string is not yet perfect and pretty but it can be. 45 is just a number.' 

Hier ist 45 übrig, weil es nicht ein Teil eines Wortes ist.

Verwandte Themen