私は現在、この正規表現を使用しています:
(\d+)
2つの文字列を取得できる問題:
「2112343 と多くの 4.99」
また
"4.99 と 2112343 の多く"
私は両方からこれを取得します:
[2112343, 4, 99]
2112343だけを取得する必要があります...どうすればこれを達成できますか?
ルックアラウンドを使用すると、キャプチャを他の数字または小数点で囲まれていない数字のみに制限できます。
(?<![0-9.])(\d+)(?![0-9.])
別の方法として、スタンドアロンの番号のみを一致させたい場合 (たとえば、 の 123 を一致させたくない場合abc123def
):
(?<!\S)\d+(?!\S)
これを試して
(?<!\S)\d+(?!\S)
これは整数のみに一致します
私があなたを正しく理解していれば、それらの数値も内部のポイントと一致させたいと考えていますが、結果のコレクションにこれらを含めたくありません。
私はこれに2つのステップでアプローチします。最初にすべての数字を選択し、ドットが付いている数字も選択します。
(\d+(?:\.\d+)*)
次に、純粋な数値ではないものをすべて除外し、最初の正規表現を使用して、最初のステップから得られたコレクションの各アイテムに適用します。
(\d+)
私がコメントに投稿したように:
(?:^| )(\d+)(?:$| )
完全に数字で構成されるすべての「単語」に一致します (単語は、スペース文字で囲まれた非スペース文字の文字列、または文字列の先頭/末尾です)。
これを試して
(?<![0-9.])\d+(?![0-9.])
パターンを使用しています
(?<!prefix)position(?!suffix)
ここでの(?<!prefix)position
意味: 接頭辞に従わない一致位置。
および position(?!suffix)
意味: サフィックスの前にない一致位置。
最終的[0-9.]
な意味: 任意の数字または小数点。
>>>r = re.match("\d+", "23423 in 3.4")
>>>r.group(0)
'23423'