1

私は現在、この正規表現を使用しています:

(\d+)

2つの文字列を取得できる問題:

「2112343 と多くの 4.99」

また

"4.99 と 2112343 の多く"

私は両方からこれを取得します:

[2112343, 4, 99]

2112343だけを取得する必要があります...どうすればこれを達成できますか?

4

6 に答える 6

7

ルックアラウンドを使用すると、キャプチャを他の数字または小数点で囲まれていない数字のみに制限できます。

(?<![0-9.])(\d+)(?![0-9.])

別の方法として、スタンドアロンの番号のみを一致させたい場合 (たとえば、 の 123 を一致させたくない場合abc123def):

(?<!\S)\d+(?!\S)
于 2012-06-30T19:33:07.103 に答える
1

これを試して

(?<!\S)\d+(?!\S)

これは整数のみに一致します

于 2012-06-30T19:33:30.260 に答える
1

私があなたを正しく理解していれば、それらの数値も内部のポイントと一致させたいと考えていますが、結果のコレクションにこれらを含めたくありません。

私はこれに2つのステップでアプローチします。最初にすべての数字を選択し、ドットが付いている数字も選択します。

(\d+(?:\.\d+)*)

次に、純粋な数値ではないものをすべて除外し、最初の正規表現を使用して、最初のステップから得られたコレクションの各アイテムに適用します。

(\d+)
于 2012-06-30T19:34:07.547 に答える
1

私がコメントに投稿したように:

(?:^| )(\d+)(?:$| )

完全に数字で構成されるすべての「単語」に一致します (単語は、スペース文字で囲まれた非スペース文字の文字列、または文字列の先頭/末尾です)。

于 2012-06-30T19:45:06.763 に答える
0

これを試して

(?<![0-9.])\d+(?![0-9.])

パターンを使用しています

(?<!prefix)position(?!suffix)

ここでの(?<!prefix)position意味: 接頭辞に従わない一致位置。

および position(?!suffix) 意味: サフィックスの前にない一致位置。

最終的[0-9.]な意味: 任意の数字または小数点。

于 2012-06-30T19:57:09.173 に答える
-1
>>>r = re.match("\d+", "23423 in 3.4")
>>>r.group(0)
'23423'
于 2012-06-30T19:36:57.653 に答える