2016-06-16 7 views
0

私はいくつかの行のファイルを持っています。これらの行のうち、私はxxxで始まる行だけを選択します。今xxxで始まる行は次のようにパターンを持っている:私は最初の二重引用符 すなわち、「PQRS」と「ABC」で自分だけの文字列を抽出したいPythonを使用してaファイルから特定の文字列を抽出する

xxx:(12:"pqrs",223,"rst",-90) 
xxx:(23:"abc",111,"def",-80) 

正規表現を使用して助けていただければ幸いです。次のように

私のコードは次のとおりです。

with open("log.txt","r") as f: 
     f = f.readlines() 
    for line in f: 
     line=line.rstrip() 
     for phrase in 'xxx:': 
      if re.match('^xxx:',line): 
       c=line 
       break 

このコードは私が

+0

指定された入力と必要な出力を提供できますか? –

+0

分かりやすい分割機能を代わりに使用してみませんか?どのようにあなたが作成できなかった正規表現を維持したいですか? – Breeze

答えて

0

あなたのコードが誤ってインデントされたエラー与えています。 f = f.readlines()の前には9つのスペースがあり、for line in f:には4つのスペースがあります。それは以下のようになります。

import re 
list_of_prefixes = ["xxx","aaa"] 
resulting_list = [] 
with open("raw.txt","r") as f: 
     f = f.readlines() 
     for line in f: 
      line=line.rstrip() 
      for phrase in list_of_prefixes: 
       if re.match(phrase + ':\(\d+:\"(\w+)',line) != None: 
        resulting_list.append(re.findall(phrase +':\(\d+:\"(\w+)',line)[0]) 
0
results = [] 
with open("log.txt","r") as f: 
    f = f.readlines() 
    for line in f: 
     if line.startswith("xxx"): 
      line = line.split(":") # line[1] will be what is after : 
      result = line[1].split(",")[0][1:-1] # will be pqrs 
      results.append(result) 

あなたは上の行を分割し、その後XXX で始まる行を探したいです:。あなたの欲しいものはコンマまでです。結果は文字列ですが、引用符は削除してください。正規表現の必要はありません。 Pythonの文字列関数はきれいになります

0

まあ、あなたは正しい方向に向かっています。

入力がこの単純な場合は、正規表現グループを使用できます。

with open("log.txt","r") as f: 
    f = f.readlines() 
    for line in f: 
     line=line.rstrip() 
     m = re.match('^xxx:\(\d*:("[^"]*")',line) 
     if m is not None: 
      print(m.group(1)) 

すべての魔法は正規表現です。

^XXX:(\ D * :("[^"] * ")行の先頭から

スタートを意味し、上の試合 "XXX :(<番号>の任意の数:" <何もしかし「>」

とシーケンス「<何もなく、」>が "丸括弧で囲まれているので、それは((1)m.groupを呼び出すことにより)グループとして利用できるようになります

PS:次の時間正確なエラーが含まれていることを確認してください。

+0

ありがとうございます。これはまさに私が探していたものです。 –

0

ラインは最初の二重引用符が

re.search(r'"(.*?)"', line).group(1) 

を行う内のテキストを検索するに

line.startswith('xxx') 

を行うXXXで始まるかどうかをチェックする(match.group(1)は最初の括弧付きのサブグループであるとして)

コードは

with open("file") as f: 
    for line in f: 
     if line.startswith('xxx'): 
      print(re.search(r'"(.*?)"', line).group(1)) 
です

re module docs

+0

ありがとうございます。私はregexで新しくなっています。私は正規表現についての明確な理解を得ることができるところからリンクや何かを教えてください。再び高すぎる。 –

+0

@RamakantaChandraドキュメントをお試しください。 – pacholik

関連する問題