2017-02-03 3 views
0

Diese Frage könnte dumm sein, ich bin neu in Regex und ich bin ein bisschen fest.Mehrere Wörter mit Regex übereinstimmen, wenn sie keine Zahl enthalten

Ich habe mehrere Zeichenfolgen, mit Zahlen und Wörtern in ihnen. Ich möchte nur die Wörter abgleichen, wenn sie keine Ganzzahl enthalten.

12 This Is A Test 9eifEf 12

Von diesem, würde Ich mag This Is A Test passen.

11 Stack 21deEh 12

Von diesem, würde Ich mag Stack passen.

Mit RegExr, ich kam mit dem Ausdruck .[a-z], die sah aus wie es funktionierte, aber es entsprach maximal 2 Buchstaben zu einer Zeit, und nicht die Leerzeichen.

Entschuldigung für die Code-Anfrage. Ich brauche nichts mehr als das Muster. Ich schätze jede Hilfe.

+0

Teilen Sie die Zeichenfolge und überprüfen Sie, ob alle Zeichen Buchstaben sind ('[x für x in s.split() wenn x.isalpha()]'). Oder ist die Anforderung spezifischer? –

+0

Haben Sie verstanden, warum Ihre Regex falsch ist? Das '.' passt auf jedes Zeichen (was nicht das ist, was Sie wollen), das' [a-Z] 'passt nur auf einen Kleinbuchstaben und Sie haben' \ b' Worttrennzeichen vergessen. Siehe Willems Post für die Lösung. –

Antwort

3

einfach verwenden:

\b[A-Za-z]+\b 

hier:

  • \b eine Wortgrenze ist so, dass wir Worte nicht übereinstimmen, die mit Ziffern beginnen;
  • [A-Za-z] ist eine Zeichengruppe, die alle oberen und unteren Buchstaben enthält; und
  • + bedeutet "ein oder mehrere".

Wenn Sie die Zeichenfolge dann zurückkehren möchten, können Sie - wie @James sagt - verwenden ' '.join(..):

$ python3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import re 
>>> rgx=re.compile(r'\b[A-Za-z]+\b') 
>>> text='12 This Is A Test 9eifEf 12' 
>>> rgx.findall(text) 
['This', 'Is', 'A', 'Test'] 
>>> ' '.join(rgx.findall(text)) 
'This Is A Test' 
+0

Auch: ''' .join (...)', um die kombinierte Zeichenfolge zurückzugeben. – James

+0

@James: Danke. Die Antwort wurde aktualisiert. –

2

Keine Notwendigkeit für regex verwenden str.isalpha Stellen herauszufiltern Worte aus gespaltet:

s = "12 This Is A Test 9eifEf 12" 

print(" ".join([x for x in s.split() if x.isalpha()])) 

gibt:

This Is A Test 

das wird jedoch nicht mehrere Leerzeichen beibehalten. Um es zu tun, tun Sie einfach:

+0

@ChrisRands: Danke für die Bearbeitung, aber die eckigen Klammern waren absichtlich. Es ist schneller, so überraschend es auch erscheinen mag. –

Verwandte Themen