2017-11-08 24 views
-1

私は、ファイルから${で始まり、Pythonを使って}で終わる文字列を抽出しようとしています。私はそうするために以下のコードを使用していますが、私は期待される結果を得ていません。

私の入力ファイルは、次のようになります。

Click ${SWIFT_TAB} 
Click ${SEARCH_SWIFT_CODE} 

と私は以下のようにリストを取得したい:

${SWIFT_TAB} 
${SEARCH_SWIFT_CODE} 

私の現在のコードは次のようになります。私は

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 cひどく手に入れるのは空リストです。

+1

正確には「動作しません」とは何ですか? –

+0

なぜ 'start'と' end'を作成して、何のために使っていないのですか? – khelwood

+2

ようこそスタックオーバーフローへ。 [ツアー]をとり、[質問]、特に[mcve]の作成方法を読んでください。 –

答えて

0

問題は、正規表現がバグで、抽出したい文字列と一致しないことです。

  1. {}はちょうど$のように、正規表現のメタ文字であり、あなたは文字通り、それらを一致させたい場合もエスケープする必要があります。具体的には、次の2つの問題があります。
  2. \bは、単語境界、すなわち「単語文字」(文字、数字または下線)と「非単語文字」(他のもの)または文字列の開始/終了の間の位置に一致します。スペースと$の間には一致しません。

は、これらの問題を解決し、あなたの行を変更するには:

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

へ:

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

をし、それが動作するはずです。

詳細はPython regular expressions documentationを参照してください。

関連する問題