2016-07-29 9 views
1
import re 
print sorted(re.findall(r'\b[abcABC][\w-]+' ,open("file.txt",'r').read())) 

datei.txt brauchen nach umfasst:Python RegExpression funktioniert nicht

aaa 
autonomic-ads-bgl 
academy 
bfc 
bhhuu 
cgak 
ctsss 
dec-ama-cdr 
dfgg-hhj-bhjk 
efghk-cgh-hghj 
pattern-bgl-fghhj 

Ausgang:

aaa 
academy 
ama-cdr 
autonomic-ads-bgl 
bfc 
bhhuu 
bgl-fghhj 
cgak 
cgh-hghj 
ctsss 

Aber erforderliche Ausgabe wird Elemente aus einem sortier c

aaa 
academy 
autonomic-ads-bgl 
bfc 
bhhuu 
cgak 
ctsss 

Antwort

0

Sie können alle Einträge ausschließen, die einen Bindestrich vor mit einem negativen Lookbehind hat:

print sorted(re.findall(r'(?<!-)\b[abcABC][\w-]+' ,s)) 
          ^^^^^^ 

Siehe Python demo

Einzelheiten:

  • (?<!-) - den negativen Lookbehind andernfalls das Spiel, wenn Es gibt eine - direkt vor dem aktuellen Regex-Index (Standort)
  • \b - eine führende Wortgrenze
  • [abcABC] - eines des Zeichens in dem Satz
  • [\w-]+-1 oder mehrere Wort- oder - Zeichen.

Beachten Sie, dass Ihre Worte, falls nicht mit einer Wortgrenze beginnen und es sollte nur Leerzeichen oder der Zeichenfolge beginnen, können Sie (?<!\S) Lookbehind statt (?<!-)\b (demo):

r'(?<!\S)[abcABC][\w-]+' 
+2

Lol , Sie haben die Frage schon gelesen: D – nicael