Pythonでテキストファイルから負値を含む数字の抽出をしたい


Pythonでテキストファイルの読み込みを行いたいです。

[code]

    Value : ********  -12.345   *****
    
[/code]

という内容のファイルから、`-12.345` の部分だけを抜き出すにはどうすればよいでしょうか。  
ファイルによって -（マイナス）がついていたりついていなかったりするのですが、ここを一般化した書き方がわかりません。  
よい書き方があれば、ご教示いただけますでしょうか。




> そこから、アスタリスクに囲まれた数字をとってくるにはどうしたらいいのか

`float` に cast する方法があります。

[code]

    def isFloat(s):
      try:
        float(s)
        return True
      except ValueError:
        return False
    
    lines = [
      'Value : ********  -12.345   *****',
      'Value : ********-12.345*****',
      'Value : ********  -1.2345e-1*****',
      'Value : ********   12.345   *****',
      'Value : ********  +12.345   *****',
      'Value : ********1.*****',
      'Value : ********.5*****',
    ]
    
    for l in lines:
      print([num.strip() for num in filter(None, l.split('*')) if isFloat(num)])
    =>
    ['-12.345']
    ['-12.345']
    ['-1.2345e-1']
    ['12.345']
    ['+12.345']
    ['1.']
    ['.5']
    
[/code]



[code]

    #!/usr/bin/env python3
    #-*- coding: utf-8 -*-↲
    
    import re
    # *** number *** 
    # ** で囲われた数字が１つあるという前提
    # 全角数字は含めない場合
    
    d = """
    Value : *** ー１０ ***
    Value : ** -100 -200 -201.1 ***
    Value : ***** -１０００ ***
    Value : ******** -12.345 *****
    Value : ******** 12.345 *****
    Value : ******** -112.345 *****
    Value : ******** -12.345 *****
    """
    
    pattern = r'\*+ ((-[0-9]+\.[0-9]+)|(-[0-9]+\.)|(-[0-9]+)) \*+'
    
    matchs = re.finditer(pattern, d)
    for match in matchs:
        print(match.groups()[0])
    
[/code]

