2017-11-08 2 views
-1

Ich versuche, die Zeichenfolgen aus einer Datei zu extrahieren, die mit ${ beginnt und mit } mit Python endet. Ich verwende den unten stehenden Code, aber ich bekomme nicht das erwartete Ergebnis.

Meine Eingabedatei sieht wie folgt aus:

Click ${SWIFT_TAB} 
Click ${SEARCH_SWIFT_CODE} 

und ich möchte, wie unten eine Liste erhalten:

${SWIFT_TAB} 
${SEARCH_SWIFT_CODE} 

Meine aktuellen Code sieht wie folgt aus:

def findStringFromFile(file): 
    import os,re  
    with open(file) as f: 
     ans = [] 
     for line in f: 

      matches = re.findall(r'\b\${\S+}\b', line) 
      ans.extend(matches)   
    print (ans) 

I Ich erwarte eine Liste von Zeichenfolgen, die mit ${ beginnen und mit } enden, aber alle I c urrently get ist eine leere Liste.

+1

Was genau bedeutet _ "es funktioniert nicht" _? –

+0

Warum erstellen Sie 'start' und' end' und verwenden sie dann für nichts? – khelwood

+2

Willkommen bei Stack Overflow. Bitte nimm die [Tour] und lies über [ask], insbesondere wie man ein [mcve] erstellt. –

Antwort

0

Das Problem ist, dass Ihre Regexp fehlerhaft ist und nicht mit den Zeichenfolgen übereinstimmt, die Sie extrahieren möchten. Insbesondere haben Sie zwei Fragen:

  1. { und } sind regexp Metazeichen, wie $, und wir müssen auch maskiert werden, wenn man sie wörtlich übereinstimmen soll.
  2. \b entspricht einer Wortgrenze, d.h. einer Position zwischen einem "Wortzeichen" (ein Buchstabe, eine Zahl oder ein Unterstrich) und einem "Nichtwortzeichen" (etwas anderes) oder dem Anfang/Ende der Zeichenfolge. Es passt nicht zwischen z. B. ein Leerzeichen und $.

diese Probleme zu beheben, Ihre Linie ändern:

matches = re.findall(r'\b\${\S+}\b', line) 

zu:

matches = re.findall(r'\$\{\S+\}', line) 

und es sollte funktionieren. Weitere Informationen finden Sie unter Python regular expressions documentation.

Verwandte Themen