3

この結果を生成する正規表現を作成するのに問題があります。

マイク1、ミーシャ1,2、ミゲル1,2,3,4,5,6,7,18、ミケア2,3

正規表現に戻って最後の一致を破棄するにはどうすればよいですか? つまり、一致しないようにするには、スペースの前にコンマが必要です。これは私が思いついたものです...

\d+(,|\r)

マイク1、ミーシャ1,2、ミゲル1,2,3,4,5,6,7,18、マイケル2,3

4

2 に答える 2

2

あなたが求めている正規表現機能は、肯定的な後読みと呼ばれます。しかし、あなたの場合、それは必要ないと思います。これを試して:

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

あなたの例では、これは数字のコンマ区切りリストと一致し、名前と末尾のコンマと空白を除外します。

以下は、PHP で記述された短いテスト コードで、入力を検証します。

<?php
$input = "Mike1, misha1,2, miguel1,2,3,4,5,6,7,18, and Micheal2,3";
$matches = array();
preg_match_all('/\d+(?:,\d+)*/', $input, $matches);
print_r($matches[0]);
?>

出力:

Array
(
    [0] => 1
    [1] => 1,2
    [2] => 1,2,3,4,5,6,7,18
    [3] => 2,3
)
于 2010-12-19T21:32:48.660 に答える
0

私は\d+,(?!\s)あなたが望むことをすると信じています。は否定先読み?!で、の後に続くものが検索文字列のこの位置に現れない場合にのみ一致します。?!

>>> re.findall(r'\d+,(?!\s)', 'Mike1, misha1,2, miguel1,2,3,4,5,6,7,18, and Michea2,3')
['1,', '1,', '2,', '3,', '4,', '5,', '6,', '7,', '2,']

または、最後のコンマを除く数字のコンマ区切りリストと一致させたい場合は、 を使用します\d+(?:,\d+)*

>>> re.findall(r'\d+(?:,\d+)*', 'Mike1, misha1,2, miguel1,2,3,4,5,6,7,18, and Michea2,3')
['1', '1,2', '1,2,3,4,5,6,7,18', '2,3']
于 2010-12-19T21:35:33.810 に答える