2016-12-30 10 views
1

を正規表現キャプチャグループを使用して、私はこの1つを助ける必要があります。のpython - 次の方法で

  1. 私は、ファイルを開いてそこからリストを作成するreadlinesメソッドを使用します。
  2. 私は摂餌/試合の最初の発生を発見し、変数

    list = ['firstString','xxxSTATUS=100','thirdString','fourthString'] 
    value = next(x for x in list if [re.search('.*STATUS=(.*)', x)]) 
    

それがあるように私は「価値」に割り当てた場合、私が手に「xxxSTATUS = 100」に最初のキャプチャグループを割り当てる必要が

  • (文字列型)、しかし、私はそうのようにそれを行う場合:

    value = next(x for x in list if [re.search('.*STATUS=(.*)', x).group(1)]) 
    

    私が取得:

    AttributeError: 'NoneType' object has no attribute 'group'

    明らかに、value.group(1)は文字列で正規表現オブジェクトではありません。私は正規表現パターンを使用しているときに、変数がまだ割り当てられていないので、変数はまだタイプされていないということも(私の前提です)得ます。

    私の質問は、この問題を解決し、キャプチャグループを割り当てる方法です。 '100'を変数に設定します。回避策はありますか?

  • +0

    re.search( 'STATUS =(。*))の場合は、リスト内のxに対して 'value = next(re.search(' STATUS =(。*) '、x).group(1) '、x)) '' 100'だけを返しますか?また、リストを繰り返して、パターンに一致する最初のものを取得してみませんか? https://ideone.com/BNb2I9を参照してください。 –

    +0

    はい、それはまさにそれでした。どうもありがとうございました!今私は間違いがどこだったかを見ます。あなたのコメントを回答してください、私はそれを受け入れることができますか? – RiddleMeThis

    答えて

    1

    エラーAttributeError: 'NoneType' object has no attribute 'group'は、一致しなかったことを意味し、ヌルオブジェクトのグループの内容にアクセスしようとしました。

    私は最も簡単な方法は、マッチを探してリスト項目を反復し、一度見つけ、グループ1つの内容を取得し、valueに割り当てることだと思う:あなたが最初の.*を必要としない

    import re 
    list = ['firstString','xxxSTATUS=100','thirdString','fourthString'] 
    value = "" 
    for x in list: 
        m = re.search('STATUS=(.*)', x) 
        if m: 
         value = m.group(1) 
         break 
    
    print(value) 
    

    注意パターンではre.searchという文字列の先頭にパターンが固定されていません。

    は、あなたが動作するようにあなたの最初のアプローチをしたい場合、あなたはre.search('STATUS=(.*)', x).group(1)とグループの内容を取得するための一致が最初if re.search('STATUS=(.*)', x)とがあるかどうかを確認し、再度それを実行する必要があり、またPython demo

    参照してください。

    value = next(re.search('STATUS=(.*)', x).group(1) for x in list if re.search('STATUS=(.*)', x)) 
    
    関連する問題