我有一些麻煩做飯了,產生這種結果的正則表達式:正則表達式:如何「退一步」
邁克,米莎1,2,米格爾1,2,3,4 ,5,6,7,18和Michea 2,3
如何退後一步在正則表達式中拋棄最後一場比賽?這是我需要一個逗號之前的空間不匹配。這是我想出了...
\d+(,|\r)
邁克1,米莎1,2,米格爾1,2,3,4,5,6,7,18,和邁克爾2,3
我有一些麻煩做飯了,產生這種結果的正則表達式:正則表達式:如何「退一步」
邁克,米莎1,2,米格爾1,2,3,4 ,5,6,7,18和Michea 2,3
如何退後一步在正則表達式中拋棄最後一場比賽?這是我需要一個逗號之前的空間不匹配。這是我想出了...
\d+(,|\r)
邁克1,米莎1,2,米格爾1,2,3,4,5,6,7,18,和邁克爾2,3
你問的關於正則表達式的特性叫做positive lookbehind。但就你而言,我不認爲你需要它。試試這個:
\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
)
我相信\d+,(?!\s)
會做你想要什麼。 ?!
是negative lookahead,只有在?!
之後出現而不是纔出現在搜索字符串中的這個位置。
>>> 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']
「\ d +,(?!\ s)」似乎不起作用,但無論如何感謝。 – Mikhail 2010-12-19 21:49:34