私はPythonのreライブラリを使ってこれを試しました。 ファイルからは、複数の行に棒で区切られた要素( '|')が含まれています。私はそれらをリストに入れて、私が必要とするのはそれらを操作するために数字を内部に入れることです。Pythonの正規表現で文字列から十進数を抽出する
これは私が分割したい文字列のいずれかのようになります。
>>print(line_input)
>>[240, 7821, 0, 12, 605, 0, 3]|[1.5, 7881.25, 0, 543, 876, 0, 121]|[237, 761, 0, 61, 7, 605, 605]
と私の意図は、角括弧の間の各要素をベクトルを形成することです。
私はこの正規表現
>>test_pattern="\|\[(\d*(\.\d+)?), (\d*(\.\d+)?), (\d*(\.\d+)?)]"
を作成したが、結果は少し混乱しています。特に、結果は
>>vectors = re.findall(test_pattern, line_input)
>>print(vectors)
>>[('240', '', '7821', '', '0', '', '12', '', '605', '', '0', '', '3', ''), ('1.5', '.5', '7881.25', '.25', '0', '', '0', '', '0', '', '0', '', '0', ''), ('23437', '', '76611', '', '0', '', '0', '', '0', '', '605', '', '605', '')]
小文字の部分が重複する理由は分かりません。私はほとんどそれを得ることを知っています、少なくとも、私はそれが小さな簡単な詳細だと確信していますが、私は取得しません。
ありがとうございます。
空白は、おそらくあなたの桁正規表現から来ています。 '(\ d *(\。\ d +)?)'は空の文字列にマッチします。 ( '\ d *'は0桁以上の数字にマッチし、 '(\。\ d +)?' *オプションで*は '.'の後の1桁以上に一致します。 '' '') – 0x5453
はい、@ 0x5453のように、これらの空白は空の可能な小数です。あなたの 'vectors'変数には空であるかどうかにかかわらず、すべての一致するグループが含まれます。だから、小数点があるときは、外部グループ '(\ d *(\。\ d +)?)'と内部グループ '(\。\ d +)?一致しないグループにします。 –