18757


pythonにおいて

[code]

    if(hogehoge(No) >=#####) 
    
[/code]

という文字列にマッチしたら#####(半角数字)の部分を取り出し

[code]

    hogehoge=****
    
[/code]

という文字列にマッチしたら****(半角数字)を取り出すような正規表現を考えています。  
うまい具合に取り出せる書き方はありませんでしょうか？

現在のコードは以下のような感じです。

[code]

    # -*- coding: utf-8 -*-
    import codecs
    import re
    
    def main():
    
    # 日本語に対応した読み出し
    f  = codecs.open('C:\workspace\hoge\setting.txt', 'r', 'shift_jis')
    data1 = f.read()  # ファイル終端まで全て読んだデータを返す
    f.close()
    lines1 = data1[:-1].split('\t')
    
    shotNoPattern = r"(if\(hogehoge\(No\) >=(\d{5})\)|hogehoge=(\d{4}))"
    for line in lines1:
        #shotNoを検索する
        repatter = re.compile(shotNoPattern)
        matchLine = repatter.match(line)
        if matchLine:
            print matchLine.group()
    
    if __name__ == "__main__":
        main()
    
[/code]

setting.txtの中身は以下のような感じです

[code]

    if(hogehoge(No) >=12909) 
        hogehoge=600
    endif
    if(hogehoge(No) >=13155) //たまにコメントがついている
        hogehoge=650
    endif
    if(hogehoge(No) >=#####) 
        hogehoge=*****
    endif
    
[/code]

※すべてのif(hogehoge(No) >=#####)の後に半角空白が一個入っています・・・

最終目的としましては.txtファイルに記載されている上記のようなテキストから値を取り出し、  
[[12909,600],[13155,650],[#####,*****],......]  
のような配列にしたいという物です


CC BY-SA 3.0
2015-11-12T15:10:55.173
18751
2015-11-12T17:21:06.577
2015-11-12T15:42:32.173
10012
10012
question
python 正規表現
正規表現の使い方について・・・

[code]

    if\(hogehoge\(No\) >=(\d+)\).*?hogehoge=(\d+)
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/c1rxo.png)](https://i.stack.imgur.com/c1rxo.png)

[実行サンプル](https://regex101.com/r/qI9iT3/3)

コンパイルオプション（`re.S`）が必要になります。

[code]

    re.compile('if\(hogehoge\(No\) >=(\d+)\).*?hogehoge=(\d+)', re.S)
    
[/code]


CC BY-SA 3.0
2015-11-12T15:20:00.937
18753
2015-11-12T16:10:17.807
2015-11-12T16:10:17.807
7290
7290
18751
answer


>
> 最終目的としましては.txtファイルに記載されている上記のようなテキストから値を取り出し、`[[12909,600],[13155,650],[#####,*****],......]`
> のような配列にしたいという物です

一例として、`endif` で区切って `re.DOTALL(re.S)` でマッチングを行う方法です。

[code]

    def main():
      # 日本語に対応した読み出し
      f  = codecs.open('C:\workspace\hoge\setting.txt', 'r', 'shift_jis')
      data1 = f.read()  # ファイル終端まで全て読んだデータを返す
      f.close()
      lines1 = data1[:-1].split('endif')
    
      shotNoPattern = r'.*if\(hogehoge\(No\) >=(\d+)\).+?hogehoge=(\d+)'
      repatter = re.compile(shotNoPattern, re.S)
      pair_array = []
      for line in lines1:
        # shotNoを検索する
        matchLine = repatter.match(line)
        if matchLine:
          pair_array.append([int(x) for x in matchLine.group(1,2)])
    
      print pair_array
    
    if __name__ == "__main__":
        main()
    
[/code]


CC BY-SA 3.0
2015-11-12T16:46:50.173
18757
2015-11-12T17:21:06.577
2015-11-12T17:21:06.577
18751
answer