我在编写产生此结果的正则表达式时遇到了一些麻烦:
迈克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
我在编写产生此结果的正则表达式时遇到了一些麻烦:
迈克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
您要询问的 regex 功能称为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)
会做你想做的。The?!
是一个否定的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']