82245

[code]

    baby_0/0.02_0.01_0.02_0.1_0.9_/qqqb_,
    baby_0/0.02_0.01_0.02_0.1_0.6000000000000001_/qqqb_
    baby_0/0.02_0.01_0.02_0.2_0.7000000000000001_/qqqb_
    ...
    
[/code]

この文字列のリスト`file_names`を正規表現を用いて、

[code]

    0.02_0.01_0.02_0.1_0.9_
    0.02_0.01_0.02_0.1_0.6000000000000001_
    0.02_0.01_0.02_0.2_0.7000000000000001_
    ...
    
[/code]

だけにしたいのです。

[code]

    match_result = [None] * len(file_names)
    for i, j in enumerate(file_names):
        match_result[i] = re.match(pattern1, j)
        print(match_result[i])
        print(j)
        match_result[i] = re.match(pattern2, match_result[i])
    
[/code]

現状、`print(match_result[i])`でNoneとなっており、そのせいで、二回目の正規表現でエラーが主力されます。  
どうすれば、いいのでしょうか？  
よろしくお願いいたします。


CC BY-SA 4.0
2021-09-05T02:48:44.523
82242
2021-09-05T03:15:02.417
42741
question
python 正規表現
pythonでの正規表現がうまく機能しません。


[re.match](https://docs.python.org/ja/3/library/re.html#re.match)は先頭がマッチするか判定します。  
部分一致の場合は[re.search](https://docs.python.org/ja/3/library/re.html#re.search)を使ってください。

[類似質問](https://ja.stackoverflow.com/q/80628/9820)


CC BY-SA 4.0
2021-09-05T03:00:45.850
82244
2021-09-05T03:00:45.850
9820
82242
answer


`re.sub()` を使ってみてはどうでしょうか。

[code]

    import re
    from pprint import pprint
    
    file_names = [
      'baby_0/0.02_0.01_0.02_0.1_0.9_/qqqb_',
      'baby_0/0.02_0.01_0.02_0.1_0.6000000000000001_/qqqb_',
      'baby_0/0.02_0.01_0.02_0.2_0.7000000000000001_/qqqb_',
    ]
    
    filter_result = [re.sub(r'^.*?/(.*)/.*?$', '\\1', fn) for fn in file_names]
    pprint(filter_result)
    
    # =>
    ['0.02_0.01_0.02_0.1_0.9_',
     '0.02_0.01_0.02_0.1_0.6000000000000001_',
     '0.02_0.01_0.02_0.2_0.7000000000000001_']
    
[/code]


CC BY-SA 4.0
2021-09-05T03:15:02.417
82245
2021-09-05T03:15:02.417
47127
82242
answer